我前段时间遇到过一个非常相似的问题,想出了一个非常简单的解决方案:直接从系统目录表中删除。注释只是“附加”到对象上,不会干扰其他对象。pg_description
DELETE FROM pg_description WHERE description = 'something special';
免责声明:
直接操作目录表是危险的,是不得已而为之的措施。您必须知道自己在做什么,并且您自己承担风险!如果你搞砸了,你可能会搞砸你的数据库(集群)。
我在 pgsql-admin list 上询问了这个想法,并从 Tom Lane 那里得到了令人鼓舞的回答:
> DELETE FROM pg_description WHERE description = 'My very special
> totally useless comment.';
> AFAICS, there are no side-effects. Are there any?
It's safe enough, as long as you don't delete the wrong comments.
There's no hidden infrastructure for a comment.
regards, tom lane
您应该确保没有任何您想保留的评论。首先检查您要删除的内容。请注意,许多内置 Postgres 对象也有注释。
例如,要仅删除表列上的所有评论,您可以使用:
SELECT *
-- DELETE
FROM pg_description
WHERE objsubid > 0;
该手册介绍了该列objsubid
:
对于表列的注释,这是列号(objoid
和
classoid
引用表本身)。对于所有其他对象类型,此列为零。