我有一个 Postgres 数据库,它存储我们系统收集的所有信息,然后是一个称为回放的模式,其中包含公共(public)模式中包含的一小部分表。这个回放模式是使用一个自动脚本创建的,该脚本在模式中提供了一些需要的 View /表,然后它找到所有依赖的表并在模式中创建它们。 (This answer 展示了我如何检索依赖项)
其中一些表当前使用规则自动填充,这意味着 pg_depends 表中有一个条目可以查询。我们目前正在将其中一些规则转换为调用函数的触发器,因为当将大块数据复制到回放模式中时,currval('some_sequence') 无法正常工作。 (This answer 也建议这是正确的做法)
不幸的是,这意味着 pg_depends 中不再有条目,创建模式的自动化脚本遗漏了一些表。有没有办法让我从函数/触发器中检索类似的依赖信息?还是一般情况下有更好的方法来做到这一点?
最佳答案
所以您想知道触发器调用的函数中使用了哪些表。那是不可能的。原因请参见停机问题。在当前版本中,PostgreSQL 不会尝试跟踪这一点,即使在某些情况下它可能是可能的(想到语言 SQL 函数,但无论如何你不能在其中编写触发器)。事实上,半官方推荐使用函数作为绕过依赖系统的方法。
在您的应用程序中,您可能应该自己寻找一种方法来跟踪这些依赖关系。
关于database-design - 触发器使用的函数的依赖性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996867/