Các phiên bản cũ hơn của PostgreSQL không tuân thủ UTF-8 nghiêm ngặt hơn các phiên bản mới hơn. Có thể bạn đang cố khôi phục dữ liệu có chứa UTF-8 không hợp lệ từ phiên bản cũ hơn sang phiên bản mới hơn.
Các chuỗi không hợp lệ phải được làm sạch. Bạn có thể làm theo quy trình đó cho từng bảng không được nhập do những lỗi sau:
-
Trích xuất nội dung của bảng từ tệp kết xuất thành tệp văn bản thuần SQL:
pg_restore --table=tablename --data-only dumpfile >plaintext.sql
-
Xóa các ký tự không hợp lệ trong trình soạn thảo văn bản hoặc tự động bằng
iconv
:iconv -c -f UTF-8 -t UTF-8 <plaintext.sql >plaintext-cleaned.sql
-
Nhập dữ liệu đã làm sạch:
psql dbname < plaintext-cleaned.sql