Khi tôi cố gắng thực hiện pg_restore.exe
một tệp kết xuất từ cơ sở dữ liệu, nó sẽ gây ra hàng tá lỗi, tất cả đều giống nhau:
ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"
Điều này rõ ràng là do thực tế là tôi đã làm trống cơ sở dữ liệu trước khi khôi phục nó khỏi tệp kết xuất (tệp này xuất phát từ cơ sở dữ liệu sản xuất) ... tất nhiên không có ràng buộc khóa ngoại nào có thể ổn nếu một bảng tham chiếu trống ...
Có cách nào để vô hiệu hóa các ràng buộc và tất cả các khóa ngoại, cho tất cả các bảng, trước khi tôi gọi pg_restore.exe
và sau đó, kích hoạt lại các ràng buộc và khóa ngoại.
Trong SO tôi đã tìm thấy một điều thú vị: trì hoãn kiểm tra ràng buộc để cam kết thời gian . Nhưng tôi không nghĩ rằng tôi có thể gọi pg_restore.exe
từ bên trong psql.exe
sau khi trì hoãn các ràng buộc.
Ngoài ra còn có bài đăng này , có từ 10 năm trước, đề nghị bỏ sau đó thêm lại các ràng buộc. Hoặc để thay đổi giá trị của trình chuyển đổi pg_ class thành 0 và điều đó cũng có thể xảy ra đối với các ràng buộc ... nhưng tôi e rằng nó bị hack nhiều hơn là thực hành tốt ...
Bạn khuyên gì, thực hành tốt nhất trong trường hợp này là gì? Việc sử dụng pg_dump.exe
với -clean
cờ có tạo ra kết xuất bỏ qua việc kiểm tra các ràng buộc khi khôi phục cơ sở dữ liệu không?