在我的postgres函数中,我使用完全限定名称(例如schemaname.tablename
)作为表中的对象,如表和其他函数。
但在几乎所有情况下,我指的是与函数本身的模式在同一模式中的对象。我怎样才能让postgres函数默认使用与为其中的对象定义的模式相同的模式?
这样我可以有一个schema_a.myfunction
指的是mytable
,但它会解决schema_a.mytable
,和schema_b.myfunction
也指mytable
但它会解决schema_b.mytable
。
我怎样才能这样设置?它可以通过简化重构和重命名模式来简化事情。我在许多模式中都有相同的表名,所以不幸的是我必须在所有函数中使用完全限定的名称。
这意味着如果我改变了模式名称之类的东西,我需要在所有postgres函数中将所有出现的schema_a.
重命名为schema_new.
。我想知道是否有更好的方法,因为有时这可能容易出错(我可能会错过替换或替换我不应该拥有的东西)。
您可以在创建和使用时设置正确的search_path
CREATE FUNCTION ...
SET search_path FROM CURRENT
要使其工作,请在运行SET
语句之前使用search_path
将CREATE FUNCTION
设置为所需的模式。
然后search_path
将在函数的持续时间内生效。