【问题标题】:Fetch Current Schema name in Postgres Function在 Postgres 函数中获取当前模式名称
【发布时间】:2020-04-27 20:48:09
【问题描述】:

我正在尝试在 Postgres pgsql 中编写一个函数,我需要在其中捕获在变量中创建此函数的模式名称,比如说函数中的 VAR,然后“将 search_path 设置为 VAR”,然后继续执行中的逻辑函数,我的问题是如何以编程方式将架构名称填充到函数主体中的架构名称到一个变量中,然后使用该变量将 search_path 设置为当前架构?还有其他方法吗?

谢谢

【问题讨论】:

  • 你到底想达到什么目的?
  • 发生的事情是,在我的函数中,我引用了函数体中的某些表,我注意到当我在部署后运行过程时,函数无法找到这些表,尽管它们存在在架构中,我得到“关系不退出错误”,因此我的想法是将 search_path 设置为当前架构,然后在函数中编写我剩余的代码逻辑。
  • 将 search_path 设置为当前模式”没有意义。 “当前架构”“搜索路径”
  • 不知道为什么会出现“关系不退出错误”,即使表存在于架构中

标签: postgresql function variables schema plpgsql


【解决方案1】:

Postgres 没有当前架构。但是你可以为每个函数设置search_path - 比如

CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
  ...
END
$$ LANGUAGE plpgsql SET search_path = 'xxx';

【讨论】:

  • @ptilloo - 如果你愿意。没有其他实际的可能性。 Postgres 是一个非常静态的环境。
  • 我以underprevlidged用户的身份登录数据库,我正在尝试运行一个需要我对表的模式名称进行质量的功能,有没有办法我可以在a中获取模式名称变量并在函数代码中使用该变量作为表名的前缀,否则在函数代码中动态设置模式名称的搜索路径
  • @ptilloo - 您可以使用动态 SQL - 请参阅 plpgsql 语句 EXECUTE。然后你可以写EXECUTE format('select * from %I.table', 'yourschema') ...,但这是一个晦涩难懂的解决方案——也许你的设计有问题
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2011-04-17
  • 2011-06-11
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多