在我的 postgres 函数中,我为其中的对象(如表和其他函数)使用完全限定名称(例如 schemaname.tablename
)。
但在几乎所有情况下,我指的是与函数本身的架构处于同一架构中的对象。我怎样才能让 postgres 函数知道在默认情况下使用与为其中的对象定义的模式相同的模式?
这样我就可以有一个 schema_a.myfunction
引用 mytable
但它会解析为 schema_a.mytable
和一个 schema_b.myfunction
也引用 mytable
但它会解析为 schema_b.mytable
。
我怎样才能这样设置呢?通过使重构和重命名模式变得容易,它确实会简化事情。我在许多模式中都有相同的表名,因此不幸的是,我必须在所有函数中使用完全限定的名称。
这意味着如果我更改模式名称之类的内容,我需要将所有出现的 schema_a.
重命名为 schema_new.
在所有 postgres 函数中。我想知道是否有更好的方法,因为有时这很容易出错(我可能会错过替换或替换我不应该拥有的东西)。
最佳答案
您可以在创建函数和使用时设置正确的search_path
CREATE FUNCTION ...
SET search_path FROM CURRENT
为此,请使用 SET
将 search_path
设置为所需的架构 before 您运行 CREATE FUNCTION
声明。
然后 search_path
将在函数运行期间生效。
关于sql - 将 postgres 函数中引用的对象的模式设置为与函数本身相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394881/