是否有任何方法可以找到Postgresql数据库中存在的触发器/函数/过程中的术语(例如列名)?
我正在研究一个赋值为"null"的操作。值到一个列,我怀疑它与数据库触发器有关,但我找不到它。
我假设您没有在版本控制中方便地使用数据库模式代码。
如果是这种情况,那么最简单的方法可能是pg_dump --schema-only
和grep或您最喜欢的文本编辑器。这是我的首选选项,因为在任何情况下您都希望看到函数体。
你总是可以查询sql/plpgsql/plpython等函数的文本(它们在pg_proc
中),但这可能比仅仅转储模式更繁琐。
最后,plpgsql-check为函数提供了一个依赖项列表工具。它可以显示任何特定plpgsql函数使用的表和其他函数。
如果你的任何函数生成动态SQL,那么你当然不能保证能够找到你的表/列的名称。在这种情况下,你可以尝试添加一个AFTER
触发器(称为"zzz_something")所以它最后运行),它可以检查您的列是否为NULL,如果是,则记录current_query()
和任何其他可能指向正确方向的详细信息。