如何确定哪些存储过程在查询中使用某个表?

时间:2012-11-16 11:09:45

标签: postgresql stored-procedures

我正在为postgres数据库做一些维护工作,一个特定的表有两个状态列,我想将其转换为一个位掩码列。该数据库使用了许多不同的存储过程来进行数据操作,而单元测试则不包含这些存储过程。

有没有办法判断此表是否在任何存储过程的查询中使用?好吧,除了使用\df+内的psql开关手动浏览每个程序的正文。

1 个答案:

答案 0 :(得分:3)

可悲的是,没有。 plpgsql函数的主体只是一个在调用时保存并执行的字符串。创建函数时,只在其上运行表面语法检查。

有时这是一种祝福。其他时候,这是一个诅咒。

在这种情况下我做了什么:转储模式并使用vim(或grep或您选择的工具)搜索转储。

pg_dump $DB -p $PORT -s -f filename.pgsql

如果您的所有函数都驻留在特定模式中(相同的单词,不同的含义!),请添加:-n $SCHEMA