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

Postgresql 如何确定哪些存储过程在查询中使用某个表?,postgresql,stored-procedures,Postgresql,Stored Procedures,我正在为postgres数据库做一些维护工作,一个特定的表有两个状态列,我想将它们转换为一个位掩码列。该数据库使用许多不同的存储过程进行数据操作,但遗憾的是,单元测试没有涵盖这些过程 有没有办法告诉存储过程是否正在查询中使用此表?嗯,除了使用psql内的\df+开关手动检查每个过程的主体之外,很遗憾,没有。plpgsql函数的主体只是一个字符串,在调用时保存并执行。创建函数时,只对其执行表面语法检查 有时这是一种祝福。其他时候,这是一种诅咒 在这种情况下我要做的是:转储模式并使用vim(或gre

我正在为postgres数据库做一些维护工作,一个特定的表有两个状态列,我想将它们转换为一个位掩码列。该数据库使用许多不同的存储过程进行数据操作,但遗憾的是,单元测试没有涵盖这些过程


有没有办法告诉存储过程是否正在查询中使用此表?嗯,除了使用
psql
内的
\df+
开关手动检查每个过程的主体之外,很遗憾,没有。plpgsql函数的主体只是一个字符串,在调用时保存并执行。创建函数时,只对其执行表面语法检查

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

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


如果您的所有函数都位于一个特定的模式中(相同的词,不同的含义!),请添加:
-n$schema

您不必转储数据库/模式:pg_catalog.pg_proc有包含源代码的prosrc列code@OndrejIvanic:True,但通过扫描转储,可以找到所有引用,包括注释和其他对象。
pg_dump $DB -p $PORT -s -f filename.pgsql