【问题标题】:PostgreSQL: getting all functions related to tablePostgreSQL:获取与表相关的所有函数
【发布时间】: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


【解决方案1】:

您可以直接在此 wiki 页面上找到所需的一切:https://wiki.postgresql.org/wiki/Pg_depend_display

根据你的 PostgreSQL 版本,有各种各样的依赖视图。

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 2012-12-25
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2016-06-25
    相关资源
    最近更新 更多