pg_dump没有对对象的评论?

时间:2013-06-10 15:36:07

标签: postgresql pg-dump

有没有办法执行pg_dump并为表/视图和列排除COMMENT ON?

我广泛使用COMMENT ON命令来描述所有对象,并且通常在其中包含换行符以获得更清晰的描述,例如:

COMMENT ON TABLE mytable1 IS 'MAIN TABLE...
NOTES:
1. ...
2. ...
3. ...
';

但是,由于转储中也有换行符,我不能简单地使用grep -v'COMMENT ON'命令删除注释。

从转储中快速删除这些COMMENT ON的其他任何方法吗?

3 个答案:

答案 0 :(得分:2)

我实际上是通过两阶段转储和恢复来实现的。

  1. 按原样转储和恢复数据库,或者使用createdb -TCREATE DATABASE WITH TEMPLATE

  2. 从旧数据库创建新数据库
  3. 运行以下命令

    Delete from pg_description;
    
  4. 转储并恢复该数据库。这将确保您没有任何恼人的依赖关系。

答案 1 :(得分:2)

AFAIK,pg_dumppg_restore都没有删除COMMENT的选项。但是,如果您使用二进制转储格式,如:

 $ pg_dump -Fc <your connection> -f /path/to/backup.dump

您可以提取TOC条目并对其进行编辑:

 $ pg_restore -l -f /path/to/backup.toc /path/to/backup.dump

以上将提取TOC文件并将其保存在/path/to/backup.toc,然后您可以找到带有COMMENT条目的每一行并删除或评论它。如果你不在对象上使用奇怪的名字,一个简单的sed就可以解决问题,用COMMENT来评论你可以这样做的行(分号开始注释):

$ sed -i 's/^\(.* COMMENT .*\)/;\1/g' bar.toc

使用这个新的TOC文件,您现在可以使用pg_restore恢复转储(使用-L选项):

$ pg_restore -L /path/to/backup.toc -d <your database> /path/to/backup.dump

答案 2 :(得分:1)

使用--no-comments选项。

示例:

$ pg_dump --no-comments [database] > dump.sql

参考:https://www.postgresql.org/docs/12/app-pgdump.html