当PostgreSQL pg_dump
完成后,它会为每个元素插入一些注释,如下所示。
--
-- 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;
是否可以强制pg_dump
删除(排除)它们?我想收到:
CREATE TABLE my_table(
id integer
);
CREATE SEQUENCE my_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
答案 0 :(得分:8)
在UNIX类型的操作系统上,我会这样做:
pg_dump [options] mydatabase | sed -e '/^--/d' >mydatabase.dmp
答案 1 :(得分:4)
我刚刚为 Postgres 11 + (仍在考虑中)提交了patch,这应该允许一个人在没有COMMENTS的情况下进行转储(直到一个理想的解决方案到位)应该是比我们使用的更好的kludge。
如果有足够的声音,它甚至可以重新修补到Postgres 10!
答案 2 :(得分:1)
run(pipeline(`pg_dump -d test`,"testdump.sql"))
这里要求Julia将备份转储到testdump.sql中,以便我们检查结果。注意反引号。然后是另一个使用@LaurenzAlbe建议的过滤器的命令:
run(pipeline(`cat testdump.sql`,`sed -e '/^--/d'`,"testdump2.sql"))
这里我们有一个三部分管道,用注释扫描备份,剥离注释并将剩余的内容转储到testdump2中。您现在可以检查第一个和第二个文件是否是必需的。
一旦你确信@LaurenzAlbe提供的解决方案是正确的,你就可以在一个管道命令中进行必要的替换来运行整个事情。当然,您可以直接在bash终端或Python或您选择的脚本引擎中执行相同的操作。
答案 3 :(得分:0)
从SQL中删除注释只有两个很好的理由:
SQL文件包含需要动态替换的格式变量(占位符)。在这种情况下,删除注释可防止在注释中引用错误变量时进行错误检测。
要最小化SQL文件,以减少需要通过IO和数据库服务器的大小。
在任何一种情况下,它都意味着SQL文件现在仅用于执行,而不是用于读取。
特别是对于PostgreSQL,有一个包pg-minify正是这样做的:
compress
)完整示例
const minify = require('pg-minify');
const fs = require('fs');
fs.readFile('./sqlTest.sql', 'utf8', (err, data) => {
if (err) {
console.log(err);
} else {
console.log(minify(data));
}
});