вимкнути обмеження перед використанням pg_restore.exe


16

Коли я намагаюся виконати 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 років тому, що пропонує відмовитись, а потім знову додати обмеження. Або змінити значення регтригерів pg_class на 0, і це також було б можливим для обмежень ... але я боюся, що це більше хакерства, ніж хорошої практики ...

Що ви радите, яка найкраща практика в цьому випадку? Чи за pg_dump.exe допомогою -cleanпрапора створюється дамп, який обходить перевірку обмежень під час відновлення бази даних?


Перекладено тут, якщо хтось знайде це пізніше: stackoverflow.com/questions/12093654/…
Крейг Рінгер

Відповіді:


28

Ви спробували --disable-triggersваріант pg_restore?

Згідно з документацією: Використовуйте це, якщо у вас є референтні перевірки цілісності або інші тригери на таблицях, які ви не хочете викликати під час перезавантаження даних.

Зауважте, що це дійсно лише для --data-onlyвідновлення та вимагає також --superuser=usernameпередачі опції.


І це працює як шарм ...
Стефан Ролланд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.