在我的postgres函数中,我对表中的对象(例如表和其他函数)使用标准名称(例如schemaname.tablename
)。
但是在几乎所有情况下,我指的是与函数本身的模式处于相同模式的对象。在默认情况下,如何让postgres函数知道使用与为其中的对象定义的模式相同的模式?
这样,我可以有一个指向schema_a.myfunction
的{{1}},但它将解析为mytable
,一个也指向schema_a.mytable
的{{1}},但是它将解析为schema_b.myfunction
。
我该如何设置呢?通过简化重构和重命名架构,确实可以简化事情。我在许多模式中都有相同的表名,因此不幸的是,我必须在所有函数中使用完全限定的名称。
这意味着,如果我更改诸如架构名称之类的内容,则需要在所有postgres函数中将所有出现的mytable
重命名为schema_b.mytable
。我想知道是否有更好的方法,因为有时这可能容易出错(我可能会错过替代品或替换本来不应该的东西)。
答案 0 :(得分:1)
创建函数并使用时,您可以设置正确的search_path
CREATE FUNCTION ...
SET search_path FROM CURRENT
要使其正常工作,请在运行SET
语句之前,先使用search_path
将CREATE FUNCTION
设置为所需的架构 。
然后search_path
在该函数有效期内有效。