5

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

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

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

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

还有其他方法可以从转储中快速删除这些 COMMENT ON 吗?

4

3 回答 3

3

AFAIK,既没有pg_dump也没有pg_restore删除COMMENTs 的选项。但是,如果您使用二进制转储格式,例如:

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

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

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

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

$ 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
于 2013-10-07T16:09:25.827 回答
3

使用该--no-comments选项。

例子:

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

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

于 2020-03-14T20:19:58.690 回答
2

我实际上会通过两阶段转储和恢复来做到这一点。

  1. createdb -T按原样转储和恢复数据库,或使用或从旧数据库创建新数据库CREATE DATABASE WITH TEMPLATE

  2. 运行以下命令

    Delete from pg_description;
    
  3. 转储并恢复该数据库。这将确保您没有任何烦人的依赖项。
于 2013-10-07T03:53:39.343 回答