Когда я пытаюсь выполнить pg_restore.exe
файл дампа из базы данных, он выдает десятки ошибок, все же:
ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"
Это, очевидно, связано с тем, что я очистил базу данных перед ее восстановлением из файла дампа (этот файл взят из рабочей базы данных) ... тогда, конечно, никакое ограничение внешних ключей не может быть нормальным, если одна ссылочная таблица пуста ...
Есть ли способ отключить ограничения и все внешние ключи, для всех таблиц, перед тем, как я позвоню pg_restore.exe
, и после этого повторно включить ограничения и внешние ключи.
В SO я нашел кое-что интересное: отложить проверку ограничений, чтобы зафиксировать время . Но я не думаю, что смогу позвонить pg_restore.exe
изнутри psql.exe
после отсрочки ограничений.
Существует также этот пост , датированный 10 лет назад, предлагающий отбросить, а затем снова добавить ограничения. Или изменить значение pt_glass reltriggers на 0, что также было бы возможно для ограничений ... но я боюсь, что это больше взлом, чем хорошая практика ...
Что вы посоветуете, какова лучшая практика в этом случае? Использование pg_dump.exe
с -clean
флагом создает дамп, который обходит проверку ограничений при восстановлении базы данных?
источник
Ответы:
Вы пробовали
--disable-triggers
вариантpg_restore
?Согласно документации: используйте это, если у вас есть проверки ссылочной целостности или другие триггеры в таблицах, которые вы не хотите вызывать во время перезагрузки данных.
Обратите внимание, что это действительно только для
--data-only
восстановления и требует, чтобы--superuser=username
опция также была пропущена.источник