将 postgres 函数中引用的对象的模式设置为与函数本身相同

Set schema for objects referred to in postgres functions to same as the function itself

在我的 postgres 函数中,我为其中的对象使用完全限定名称(例如 schemaname.tablename),例如 tables 和其他函数。

但在几乎所有情况下,我指的是与函数本身的架构处于同一架构中的对象。我怎样才能让 postgres 函数知道在默认情况下使用与为其中的对象定义的模式相同的模式?

这样我可以有一个 schema_a.myfunction 引用 mytable 但它会解析为 schema_a.mytable,还有一个 schema_b.myfunction 也引用 mytable 但它会解析为 schema_b.mytable.

我该如何设置?通过使重构和重命名模式变得容易,它确实会简化事情。我在许多模式中使用相同的 table 名称,因此不幸的是,我必须在所有函数中使用完全限定名称。

这意味着如果我更改模式名称之类的内容,我需要在所有 postgres 函数中将所有出现的 schema_a. 重命名为 schema_new.。我想知道是否有更好的方法,因为有时这很容易出错(我可能会错过替换或替换我不应该拥有的东西)。

您可以在创建函数和使用时设置正确的search_path

CREATE FUNCTION ...
SET search_path FROM CURRENT

为此,请使用 SETsearch_path 设置为所需的架构 ,然后 您 运行 CREATE FUNCTION声明。

那么search_path将在函数持续时间内有效。