介绍:
PostgreSQL 数据库,包含数百个存储函数,包括过时的、未使用的等。
问题
我需要找出与表 X 有任何关系的所有存储函数 - 因为我想更改表结构。其中一些可能没有使用,所以我不能通过查看代码来做到这一点。
我有 ATM 的解决方案是运行 psql\df+和 grepping 输出,但我更喜欢更像数据库的解决方案,即通过使用信息模式。这肯定是一项重复性的任务,我希望它干净整洁。
有什么建议?
现在我必须使用查询来获取文本文件中的命令。然后从中删除双引号。最后,在 psql shell 中运行该文件。
如何一步删除 PostgreSQL中的所有函数?
我正在尝试按照 Craig Ringer 对这个问题的回答:https :
//stackoverflow.com/questions/13758003/how-to-take-backup-of-functions-only-in-postgres
我的命令是:
psql -U username -AT db_name -c "
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public'
" > /dump/file/functions.sql
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Run Code Online (Sandbox Code Playgroud)Error: "st_extent" is an aggregate function
为什么它不喜欢聚合函数?我该怎么做才能解决这个问题?
我在这里使用以下图像(即 9.3-2.1、11.0-2.5 和 12.0 标签)创建了一个 PostGIS 数据库,但是当我尝试打开“公共”模式时出现以下错误:
An error has occurred:
11:43:59: Error: ERROR: column "proisagg" does not exist
LINE 9: WHERE proisagg = FALSE AND pronamespace = 2200::oid
HINT: Perhaps you meant to reference the column "pr.prolang".
Run Code Online (Sandbox Code Playgroud)
An error has occurred:
11:46:24: Error: ERROR: column rel.relhasoids does not exist
LINE 1: ...t_userbyid(rel.relowner) AS relowner, rel.relacl, rel.relhas...
Run Code Online (Sandbox Code Playgroud)
我在这里和这里找到了可能的解决方案。我试图询问我应该如何更新查询,但我需要至少 50 个声望才能发表评论。
有谁知道我应该如何解决这个问题?或者我应该如何更改 pgAdmin 上查询的定义?
提前致谢。
系统: