Ketika saya mencoba mengeksekusi pg_restore.exe
file dump dari database, ia membuang lusinan kesalahan, semuanya sama:
ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"
Ini jelas karena fakta bahwa saya telah mengosongkan basis data sebelum mengembalikannya dari file dump (file ini berasal dari basis data produksi) ... maka tentu saja tidak ada batasan kunci asing yang boleh ok jika satu tabel yang direferensikan kosong ...
Apakah ada cara untuk menonaktifkan batasan dan semua kunci asing, untuk semua tabel, sebelum saya panggil pg_restore.exe
, dan setelah itu, aktifkan kembali kendala dan kunci asing.
Di SO saya menemukan sesuatu yang menarik: menunda memeriksa kendala untuk melakukan waktu . Tapi saya tidak berpikir saya bisa menelepon pg_restore.exe
dari dalam psql.exe
setelah menunda kendala.
Ada juga postingan ini , yang berasal dari 10 tahun yang lalu, menyarankan untuk drop kemudian menambahkan kembali kendala. Atau untuk mengubah nilai reltriggers pg_class ke 0 dan itu juga mungkin untuk kendala ... tapi saya khawatir ini lebih meretas daripada praktik yang baik ...
Apa yang Anda sarankan, apa praktik terbaik dalam kasus ini? Apakah menggunakan pg_dump.exe
dengan -clean
flag menciptakan dump yang melewati kendala memeriksa ketika mengembalikan database?
sumber
Jawaban:
Sudahkah Anda mencoba
--disable-triggers
opsipg_restore
?Per dokumentasi: Gunakan ini jika Anda memiliki pemeriksaan integritas referensial atau pemicu lain pada tabel yang tidak ingin Anda panggil saat memuat ulang data.
Harap dicatat bahwa ini hanya valid untuk
--data-only
pengembalian dan mengharuskan--superuser=username
opsi untuk diteruskan juga.sumber