从pg_dump输出中删除注释

Mar*_*ato 6 sql postgresql postgresql-9.2

pg_dump完成PostgreSQL 后,它会为每个元素插入一些注释,如下所示.

--
-- Name: my_table; Type: TABLE; Schema: account; Owner: user; Tablespace:
--

CREATE TABLE my_table(
    id integer
);

--
-- Name: my_seq; Type: SEQUENCE; Schema: account; Owner: user
--

CREATE SEQUENCE my_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
Run Code Online (Sandbox Code Playgroud)

是否有可能强制pg_dump删除(排除)它们?我想收到:

CREATE TABLE my_table(
    id integer
);

CREATE SEQUENCE my_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 10

在UNIX类型的操作系统上,我会这样做:

pg_dump [options] mydatabase | sed -e '/^--/d' >mydatabase.dmp
Run Code Online (Sandbox Code Playgroud)

  • 这将删除该行并且*不*留下一个空行。您看到的空行在原始转储文件中是空的。使用 `sed` 命令 `/^$/d` 删除这些。 (2认同)
  • 请注意,使用默认的“pg_dump”输出格式,如果任何表包含内容以“--”开头的行,您将删除该数据!(例如:`CREATE TABLE strs(s text); INSERT INTO strs(s) VALUES('-- hi');`。) (2认同)
  • @LaurenzAlbe:是的,当然`psql`可以恢复以`--`开头的值。显式删除带有“sed”行的代码来自您对这个问题的回答。我的评论指出,您的答案提供的“sed -e '/^--/d'”,其“意图”仅删除“pg_dump”生成的 SQL 注释,也可以从转储中删除实际数据。 (2认同)

Rob*_*kan 5

我刚刚为Postgres 11+(仍在考虑中)提交了此补丁,该补丁应该允许人们在没有COMMENTS的情况下转储(直到找到理想的解决方案),这应该比我们使用的补丁略好一些。

如果有足够的声音,它甚至可能会回补到Postgres 10!

  • 作者想要从 pg_dump 输出中删除以 -- 开头的行,而不是禁用 SQL COMMENT 语句的输出。 (17认同)
  • 在 pg_dump (PostgreSQL) 11.11 (Debian 11.11-1.pgdg90+1) 中,存在 `--no-comments` 标志,但实际上似乎没有执行任何操作。至少与我正在使用的标志组合 (4认同)
  • 长期要求的功能!:-D (2认同)