Có vẻ như bạn đang nhận được kết xuất SQL chứ không phải kết xuất nhị phân từ pg_dump
. Điều đó sẽ cung cấp cho bạn một đống SQL lớn với lược đồ (bao gồm cả FK) ở trên cùng, theo sau là một loạt INSERT để tải lại dữ liệu. Kết xuất nhị phân từ pg_dump
sẽ phục vụ bạn tốt hơn, có vẻ như bạn cần thêm một chút cấu hình để cho PhpPgAdmin biết pg_dump
ở đâu Là. Sau đó, bạn sẽ cung cấp kết xuất nhị phân đó vào pg_restore
và pg_restore
sẽ xây dựng lại mọi thứ theo thứ tự thích hợp để tránh các vấn đề về tính toàn vẹn của tham chiếu (hoặc chính xác hơn là pg_restore
sẽ khôi phục tất cả dữ liệu sau đó thêm các ràng buộc).
PhpPgAdmin dường như muốn làm việc với kết xuất SQL đơn giản
thay vì pg_restore
. Tôi thấy điều này thật khó tin nhưng tôi không thể tìm thấy bất kỳ điều gì trong tài liệu về cách gọi pg_restore
. Nếu điều này là đúng thì có thể bạn sẽ phải chỉnh sửa thủ công kết xuất SQL và chuyển tất cả các FK xuống cuối.
Bạn cũng có thể thử thêm SET CONSTRAINTS ALL DEFERRED;
ở đầu kết xuất SQL của bạn, điều này sẽ trì hoãn việc kiểm tra ràng buộc cho đến khi kết thúc giao dịch, bạn cũng sẽ muốn đảm bảo rằng toàn bộ khối INSERT được chứa trong một giao dịch.
Nếu PhpPgAdmin thực sự không thể gọi pg_restore
thì tốt hơn hết bạn nên sử dụng pg_dump
và pg_restore
bằng tay để bạn có quyền kiểm soát cần thiết đối với các quy trình sao lưu của mình. Rất tiếc, bất kỳ công cụ quản trị cơ sở dữ liệu nào không thể xử lý việc sao lưu cơ sở dữ liệu bằng FKs còn tệ hơn là vô dụng. Hy vọng rằng ai đó biết cách của họ xung quanh PhpPgAdmin sẽ xuất hiện và cho chúng tôi biết cách sử dụng pg_restore
với PhpPgAdmin.