pg_restore không thành công trên bãi chứa nén zlib


1

Tạo kết xuất cơ sở dữ liệu postgresql (windows phiên bản 9.3 hoặc 9.4) bằng lệnh:

C:\>pg_dump -U user -Z 6 database > db.dump

Khôi phục nó với psql hoặc pg_restore không thành công:

C:\>psql.exe -U postgres db < db.dump  
ERROR: invalid byte sequence for encoding "UTF8": 0x8b

C:\>pg_restore.exe -U postgres -d db < db.dump  
pg_restore: [archiver] input file does not appear to be a valid archive

C:\>pg_restore.exe -U postgres -d db --format=c db.dump
pg_restore: [archiver] did not find magic string in file header

cố gắng xác minh tập tin:

user:~$ file db.dump
db.dump: gzip compressed data, from NTFS filesystem (NT)

user:~$ zcat db.dump
gzip: db.dump: invalid compressed data--format violated

Vậy làm thế nào để tôi khôi phục bãi chứa nén này?

Câu trả lời:


1

Tệp mà bạn đã tạo là một tệp văn bản thuần được nén. Để khôi phục điều đó, hãy sử dụng một cái gì đó như

zcat db.dump | psql ...

Nếu bạn muốn kết xuất văn bản không đơn giản, bạn nên sử dụng tùy chọn -Fckhi chạy pg_dump.


Chính xác, nó là một tệp văn bản đơn giản được nén, mặc dù tôi đã chỉ ra rằng zcat không thành công. Máy chủ hiện đã chết và tôi cần lấy lại dữ liệu để tùy chọn duy nhất của tôi là khôi phục / giải nén tệp này
macns

1

Câu trả lời ngắn: chạy fixgztrên bãi chứa nén.

fixgz.exe bad.gz fixed.gz

Câu trả lời dài: Vì vậy, nếu bạn đã sử dụng pg_dump--compressshoặc -Zkhông chỉ định tùy chọn định dạng tùy chỉnh ( -Fc), những gì bạn thực sự nhận được là một tệp nén ở chế độ ASCII thay vì chế độ BINary.

Trích dẫn từ trang chủ gzip :

99,9% sự cố với gzip là do chuyển tập tin được thực hiện ở chế độ ASCII thay vì chế độ BINary. Cụ thể, gopher được biết đến với các tệp nhị phân bị hỏng bằng cách coi chúng là ASCII. Hãy chắc chắn rằng bản sao cục bộ của tập tin có chính xác kích thước byte giống như bản gốc.

Nếu bạn đã chuyển một tệp ở chế độ ASCII và bạn không còn quyền truy cập vào bản gốc, bạn có thể thử chương trình fixgz để loại bỏ các byte CR (trả lại vận chuyển) bổ sung được chèn bởi quá trình chuyển. Một nhị phân Windows 9x / NT / 2000 / ME / XP có ở đây . Nhưng hoàn toàn không có gì đảm bảo rằng điều này sẽ thực sự sửa chữa tệp của bạn. Kết luận: không bao giờ chuyển tệp nhị phân trong chế độ ASCII.

[Lưu ý rằng liên kết " ở đây " là liên kết trực tiếp đến tệp ZIP có thể tải xuống bao gồm .cnguồn ( .exe), tệp thực thi ( ) và a README.]


Cả -Fc và -Z không có -Fc đều tạo ra tệp nhị phân. Một công cụ chuyển được sử dụng để sao chép tệp đó từ máy này sang máy khác phải để nó không được sửa đổi. Công cụ và tùy chọn bạn đã sử dụng để sao chép tệp mà câu hỏi không đề cập đến, rõ ràng là nguyên nhân gốc rễ của sự thất bại ở đây.
Daniel Vérité

Liên kết trong câu trả lời ban đầu dường như không còn hoạt động. Tại thời điểm này, ít nhất, nó có thể được tìm thấy qua web.archive.org/web/20180624175352/http://www.gzip.org/ tên .
Jonathan B.

Người ta phải tự hỏi tại sao những người gzip bị xóa fixgz khỏi trang chủ của họ  - có vấn đề gì với nó không? Có điều gì tốt hơn?
Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.