将 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
为此,请使用 SET
将 search_path
设置为所需的架构 ,然后 您 运行 CREATE FUNCTION
声明。
那么search_path
将在函数持续时间内有效。
在我的 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
为此,请使用 SET
将 search_path
设置为所需的架构 ,然后 您 运行 CREATE FUNCTION
声明。
那么search_path
将在函数持续时间内有效。