我有两个系统在运行,一个在 Linux 上,另一个在 Windows 上。在 Linux 机器上,我对两个系统都运行了 pg_dump 并转储了架构。
pg_dump 命令:
pg_dump -h HOST -U USER -s -f /tmp/out.sql DB_NAME
在我删除所有“--”注释后,我将文件合并在一起。
差异输出片段,Linux 与 Windows 相比:
- ADD CONSTRAINT sys_c004775 FOREIGN KEY (ruleid) REFERENCES rule(ruleid);
+ ADD CONSTRAINT sys_c004775 FOREIGN KEY (ruleid) REFERENCES "rule"(ruleid);
Linux 转储不引用任何实体,而 Windows 引用。这是某种编码的功能还是仅仅是 Windows 和 Linux 之间的差异?pg_dump 中是否有选项可以使输出更一致?
答案1
这很奇怪,但这两行都是正确的,并且可以在任何操作系统上的任何 PostgreSQL 数据库中工作。“rule”不是保留字,但它是 PostgreSQL 中的对象类型。这可能是某些版本的 pg_dump 将此名称视为不同名称的原因。如果您确实需要不带引号的名称,只需使用另一个名称,一个与对象类型没有任何冲突的名称。