我正在尝试查看任何函数/序列中是否存在特定列。我找到了一个可以搜索表格的脚本,那里有什么可以让我搜索函数/序列(通常是理想的任何地方)吗?
select t.table_schema,
t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name
and c.table_schema = t.table_schema
where c.column_name = 'product_id'
and t.table_schema not in ('information_schema', 'pg_catalog')
order by t.table_schema;
以上可以向我显示具有product_id
列的视图/表。
目前正在使用 Postgres 12。似乎找不到可以列出函数/序列的。
我会使用:
看:
这包括视图(
relkind
'v'),它们在内部实现为具有重写规则的特殊表。(以及其他一些种类。)A
SEQUENCE
从来没有名为 的列"product_id"
。序列被实现为具有这些列的特殊内部类似表的对象。您可能在这里混淆了术语?)函数(或过程)是特殊的。有各种类型的例程。手册关于
pg_proc.prokind
:以及各种编程语言。库存 Postgres 附带
internal
、c
、sql
和plpgsql
。您可以安装更多。检查:每个都有自己处理函数体的方式,可以将其存储为原始字符串、解析树或库的引用。
PL/pgSQL 函数(和过程)主体存储为字符串。系统不会为这些存储涉及函数体的任何依赖项。它们在调用时被解析,并且包含的语句仅在控制到达时才执行。
更重要的是,动态 SQL 可以以任何方式连接包括列名在内的 SQL 字符串,因此实际上不可能识别出足以混淆其动态 SQL 的函数。
您还需要准确定义
'product_id'
符合条件的类型。仅当它引用表列时?还是参数参数?输出字段?这是一个非常粗略的开始,它可以找到以任何方式包含单词“product_id”的所有例程(函数、过程):
适用于简单安装。
带有“C”语言参考库的函数根本无法找到。无法可靠地搜索动态 SQL。