【发布时间】:2015-06-08 12:46:30
【问题描述】:
我有这个功能:
SELECT n.nspname AS schema_name
,p.proname AS function_name
,pg_get_function_arguments(p.oid) AS args
,pg_get_functiondef(p.oid) AS func_def
FROM (SELECT oid, * FROM pg_proc p WHERE NOT p.proisagg) p
JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE n.nspname !~~ 'pg_%'
AND n.nspname <> 'information_schema'
AND pg_get_functiondef(p.oid) ~ '\mTableName\M';
它给了我一个使用 TableName 的函数列表。但是它不会忽略注释。例如,如果在function A 中会有这样一行:
-- select * from TableName
它会在结果中显示A,即使它是一个注释和A 并没有真正使用TableName。
我怎样才能做出一个做同样事情但忽略所有笔记的查询?
【问题讨论】:
-
你可以添加一些 RegEx 搜索模式 .. 比如 --[._+=[:alnum:] ]+TableName
-
我不是 SQL 专家,但我的本能反应是这要么不可能,要么极其复杂以至于不值得做。您最好手动查看查询的结果。
-
在 PostgreSQL 中,每行注释必须带有“--”,这与其他语言不同,您可以在开始和结束时打开带有标记的注释块。所以我的直觉是调整查询以忽略所有以'--'开头的行,但我不确定它是否可行。
-
@John 我的继任者 ;)
-
注释行不是您唯一的问题;想想
EXECUTE 'SELECT * FROM Table' || 'Name';你不会从函数定义中得到可靠的列表。
标签: sql postgresql