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

问题描述 投票:2回答:1

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

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

这样我可以有一个schema_a.myfunction指的是mytable,但它会解决schema_a.mytable,和schema_b.myfunction也指mytable但它会解决schema_b.mytable

我怎样才能这样设置?它可以通过简化重构和重命名模式来简化事情。我在许多模式中都有相同的表名,所以不幸的是我必须在所有函数中使用完全限定的名称。

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

sql postgresql sql-function
1个回答
1
投票

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

CREATE FUNCTION ...
SET search_path FROM CURRENT

要使其工作,请在运行SET语句之前使用search_pathCREATE FUNCTION设置为所需的模式。

然后search_path将在函数的持续时间内生效。

© www.soinside.com 2019 - 2024. All rights reserved.