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

标签 sql postgresql sql-function

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

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

这样我就可以有一个 schema_a.myfunction 引用 mytable 但它会解析为 schema_a.mytable 和一个 schema_b.myfunction 也引用 mytable 但它会解析为 schema_b.mytable

我怎样才能这样设置呢?通过使重构和重命名模式变得容易,它确实会简化事情。我在许多模式中都有相同的表名,因此不幸的是,我必须在所有函数中使用完全限定的名称。

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

最佳答案

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

CREATE FUNCTION ...
SET search_path FROM CURRENT

为此,请使用 SETsearch_path 设置为所需的架构 before 您运行 CREATE FUNCTION声明。

然后 search_path 将在函数运行期间生效。

关于sql - 将 postgres 函数中引用的对象的模式设置为与函数本身相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394881/

相关文章:

ruby-on-rails - Docker:Docker-compose ruby​​ + postgres - PG::ConnectionBadcould not connect to server

sql - 有没有办法使用 Kotlin 的暴露库运行原始 sql

mysql - 需要在 SQL 中将一个属性限制为 3 个值

SQL 主键重复值

python - 为什么 Django 说我还没有设置 DATABASE_ENGINE?

mysql - 从存储函数中的 DATE_SUB/DATE_ADD 返回值

mysql - 如何编写可以得到以下结果的 SQL 查询?

postgresql - 在 pgadmin4 中使列可编辑

postgresql - Postgresql - 将聚合、逗号分隔值拆分为查询内的单独列 - 使用 Amazon Aws 和 PostgreSql 9.6

azure-devops - Azure Pipelines - 针对 DB 的文件夹中的 CI/CD : How to execute all . sql 文件