Câu trả lời:
Sử dụng --table
để cho biết pg_dump
nó phải sao lưu bảng nào:
pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
psql -U username -d database -1 -f your_dump.sql
--ignore-version
. Câu trả lời của Prashant Kumar, đơn giản hơn, đã làm việc cho tôi.
Nếu bạn đang dùng Ubuntu,
sudo su postgres
pg_dump -d <database_name> -t <table_name> > file.sql
Đảm bảo rằng bạn đang thực thi lệnh nơi postgres
người dùng có quyền ghi (Ví dụ /tmp
:)
Biên tập
Nếu bạn muốn kết xuất .sql trong một máy tính khác, bạn có thể cần xem xét bỏ qua thông tin chủ sở hữu được lưu vào tệp .sql.
Bạn có thể dùng pg_dump --no-owner -d <database_name> -t <table_name> > file.sql
pg_dump -d <database_name> > file.sql
pg_dump -t <table_name> <database_name> > file.sql
pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql
Bạn có thể lấy bản sao lưu của một bảng duy nhất nhưng tôi khuyên bạn nên sao lưu toàn bộ cơ sở dữ liệu và sau đó khôi phục bất kỳ bảng nào bạn cần. Nó luôn luôn tốt để có bản sao lưu của toàn bộ cơ sở dữ liệu.
max(id)
trên bàn của tôi. đây là câu trả lời phù hợp và tôi tự tin, nhìn vào sql được tạo ra, rằng tôi có thể đã khôi phục nó.
Nếu bạn thích giao diện người dùng đồ họa, bạn có thể sử dụng pgAdmin III (Linux / Windows / OS X). Chỉ cần nhấp chuột phải vào bảng bạn chọn, sau đó "sao lưu". Nó sẽ tạo ra một pg_dump
lệnh cho bạn.
Ngoài câu trả lời của Frank Heiken, nếu bạn muốn sử dụng INSERT
câu lệnh thay vì copy from stdin
, thì bạn nên chỉ định --inserts
cờ
pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname
Lưu ý rằng tôi đã bỏ --ignore-version
cờ, vì nó không được dùng nữa.
pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"
nhưng nó đã xuất hiện:pg_restore: [tar archiver] corrupt tar header found in --