pg_restore.exe dosyasını kullanmadan önce kısıtlamaları devre dışı bırak


16

Bir pg_restore.exeveritabanından döküm dosyasını yürütmeye çalıştığımda , düzinelerce hata atıyor, hepsi aynı:

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

Bunun nedeni, veri tabanını döküm dosyasından geri yüklemeden önce boşalttığımdan kaynaklanmaktadır (bu dosya bir üretim veritabanından gelir) ... sonra referans verilen bir tablo boşsa, hiçbir yabancı anahtar kısıtlaması tamam olamaz ...

Tüm tablolar için kısıtlamaları ve tüm yabancı anahtarları devre dışı bırakmanın bir yolu var mı? Aramadan önce pg_restore.exeve sonra, kısıtlamaları ve yabancı anahtarları yeniden etkinleştirin.

SO'da ilginç bir şey buldum: zaman ayırmak için kısıt kontrolünü erteleme . Ama kısıtlamaları erteledikten sonra pg_restore.exeiçeriden arayabileceğimi sanmıyorum psql.exe.

Ayrıca, 10 yıl öncesine ait, kısıtlamaları bırakıp yeniden eklemenizi öneren bu yazı da var . Veya pg_class reltriggers değerini 0 olarak değiştirmek ve bu kısıtlamalar için de mümkün olur ... ama korkarım iyi uygulamadan daha hack'tir ...

Ne tavsiye edersiniz, bu durumda en iyi uygulama nedir? Kullanıyor pg_dump.exe olan -cleanbayrak veritabanını geri yüklerken kontrol kısıtlamaları atlar bir dökümü oluşturur?


Kimsenin bunu daha sonra bulması durumunda buraya çapraz gönderildi: stackoverflow.com/questions/12093654/…
Craig Ringer

Yanıtlar:


28

--disable-triggersSeçeneği denediniz pg_restoremi?

Belgelere göre: Veri yüklemesi sırasında çağırmak istemediğiniz tablolarda referans bütünlük denetimleri veya başka tetikleyiciler varsa bunu kullanın.

Bunun yalnızca --data-onlygeri yükleme için geçerli olduğunu ve --superuser=usernameseçeneğin de geçilmesini gerektirdiğini lütfen unutmayın .


Ve bir cazibe gibi çalışıyor ...
Stephane Rolland
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.