У меня работают две системы, одна на 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 и Linux? Есть ли в pg_dump возможность сделать вывод более согласованным?
Как ни странно, но обе строки правильные и будут работать в любой PostgreSQL-базе данных на любой ОС. «правило» - не зарезервированное слово, но это объектный тип в PostgreSQL. Это может быть причиной того, что какая-то версия pg_dump трактует это имя иначе. Если вам действительно нужны имена без кавычек, просто используйте другое имя, имя без каких-либо конфликтов с типами объектов.