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

时间:2018-09-18 21:32:57

标签: sql postgresql sql-function

在我的postgres函数中,我对表中的对象(例如表和其他函数)使用标准名称(例如schemaname.tablename)。

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

这样,我可以有一个指向schema_a.myfunction的{​​{1}},但它将解析为mytable,一个也指向schema_a.mytable的{​​{1}},但是它将解析为schema_b.myfunction

我该如何设置呢?通过简化重构和重命名架构,确实可以简化事情。我在许多模式中都有相同的表名,因此不幸的是,我必须在所有函数中使用完全限定的名称。

这意味着,如果我更改诸如架构名称之类的内容,则需要在所有postgres函数中将所有出现的mytable重命名为schema_b.mytable。我想知道是否有更好的方法,因为有时这可能容易出错(我可能会错过替代品或替换本来不应该的东西)。

1 个答案:

答案 0 :(得分:1)

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

CREATE FUNCTION ...
SET search_path FROM CURRENT

要使其正常工作,请在运行SET语句之前,先使用search_pathCREATE FUNCTION设置为所需的架构

然后search_path在该函数有效期内有效。