tệp đầu vào dường như là một kết xuất định dạng văn bản. Vui lòng sử dụng psql


93

Tôi sao lưu bằng cách sử dụng

pg_dump db_production > postgres_db.dump

và sau đó tôi sao chép nó vào localhost bằng cách sử dụng scp.

Bây giờ khi tôi nhập trên db cục bộ của mình, nó sẽ báo lỗi

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

bằng cách sử dụng dòng dấu phẩy

pg_restore -d db_development postgres_db.dump

Câu trả lời:


135

Từ pg_dumptài liệu:

Ví dụ

Để kết xuất cơ sở dữ liệu có tên mydb vào tệp SQL-script :

$ pg_dump mydb > db.sql

Để tải lại một tập lệnh như vậy vào cơ sở dữ liệu (mới được tạo) có tên newdb :

$ psql -d newdb -f db.sql

Để kết xuất cơ sở dữ liệu vào tệp lưu trữ định dạng tùy chỉnh:

$ pg_dump -Fc mydb > db.dump

Để kết xuất cơ sở dữ liệu vào kho lưu trữ định dạng thư mục:

$ pg_dump -Fd mydb -f dumpdir

Để tải lại tệp lưu trữ vào cơ sở dữ liệu (mới được tạo) có tên newdb:

$ pg_restore -d newdb db.dump

Từ pg_restoretài liệu:

Ví dụ

Giả sử chúng ta đã kết xuất một cơ sở dữ liệu có tên mydb vào một tệp kết xuất định dạng tùy chỉnh:

$ pg_dump -Fc mydb > db.dump

Để thả cơ sở dữ liệu và tạo lại nó từ kết xuất:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump

2
khi tôi làm pg_restore, tôi nhận được pg_restore: tệp đầu vào [archiver] dường như là một kết xuất định dạng văn bản. Vui lòng sử dụng psql.
Haseeb Ahmad

Tôi sử dụng cái nào để khôi phục db?
Haseeb Ahmad

67
điều này không trả lời câu hỏi
dopatraman

1
kiếm một cách để khôi phục lại từ một tập tin văn bản kiểm tra serverfault.com/questions/260607/...
chrs

5
IMO bài đăng này có một chút quá nhiều chi tiết làm xáo trộn câu trả lời. Điều mà tác giả không chỉ ra là tài liệu pg_dump cho tham số '-F' không cho biết định dạng mặc định ('p' / 'trơn') phù hợp với pg_restore. pg_restore yêu cầu rằng pg_dump được sử dụng với các định dạng 'c', 'd' hoặc 't'.
Matt

59

Câu trả lời ở trên không phù hợp với tôi, điều này đã hoạt động:

psql db_development < postgres_db.dump


Ngắn và ngọt. Cũng làm việc cho tôi.
Học sinh

11

Đối với tôi khi tôi cố gắng khôi phục từ máy chủ từ xa mà tôi đã sử dụng

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

hoạt động tốt. Và nếu không có điều khiển từ xa thì chỉ cần làm theo lệnh.

psql -d database < db.dump

7

Để tạo bản sao lưu bằng cách sử dụng pg_dumptương thích với pg_restorebạn, bạn phải sử dụng dấu --format=custom/ -Fckhi tạo kết xuất.

Từ các tài liệu:

Xuất ra một kho lưu trữ định dạng tùy chỉnh phù hợp để nhập vào pg_restore.

Vì vậy, pg_dumplệnh của bạn có thể giống như sau:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

pg_restorelệnh của bạn :

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump

6

Đối với tôi, nó hoạt động như thế này. C: \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d dummy -f C: \ Users \ Downloads \ d2cm_test.sql


2
Câu trả lời đơn giản và hữu ích!
Rax Weber

1
Cảm ơn bạn @RAJNISH YADAV.
Amit

0

nếu bạn sử dụng pg_dump với -Fp để sao lưu ở định dạng văn bản thuần túy, hãy sử dụng lệnh sau:

cat db.txt | psql dbname

để sao chép tất cả dữ liệu vào cơ sở dữ liệu của bạn với tên dbname


0

Nếu bạn có một kết xuất DB đầy đủ:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Tuy nhiên, nếu bạn có các lược đồ được lưu giữ riêng biệt, điều đó sẽ không hoạt động. Sau đó, bạn sẽ cần phải tắt các trình kích hoạt để chèn dữ liệu, tương tự như vậy pg_restore --disable-triggers. Sau đó, bạn có thể sử dụng cái này:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Tôi nghĩ đó là một nhược điểm rất đáng tiếc của postgres. Cách tạo bãi chứa mặc định pg_dumpkhông tương thích với pg_restore. Tuy nhiên, với một số phím bổ sung. WTF?

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.