Làm cách nào để tạo bản sao lưu của một bảng trong cơ sở dữ liệu postgres?


160

Có cách nào để tạo bản sao lưu của một bảng trong cơ sở dữ liệu bằng postgres không? Và làm thế nào? Điều này cũng hoạt động với lệnh pg_dump?

Câu trả lời:


211

Sử dụng --tableđể cho biết pg_dumpnó 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

9
Và làm thế nào để khôi phục tập tin sao lưu đó. (.backup), tôi đã sử dụng 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 --
Anderson Dorregaray Linares

13
psql -U username -d database -1 -f your_dump.sql
rnaud

5
Ý bạn là gì: trừu tượng_file_path?
bandungeuy

3
Tôi không chắc tại sao câu trả lời này được bình chọn, mọi người nhấp vào +1 mà không tự kiểm tra mọi thứ hoặc thử. Vấn đề với câu trả lời này, khiến nó hoàn toàn vô dụng, là giải pháp / lệnh được đưa ra không xuất các chuỗi được tạo trên bảng (khóa chính) và do đó quá trình nhập thất bại. Tôi không biết về một cơ sở dữ liệu PG sản xuất duy nhất ở bất kỳ nơi nào không sử dụng khóa chính với trình tự. Đó là một nửa câu trả lời, không trả lời kỹ lưỡng câu hỏi và yêu cầu công việc bổ sung để xuất / nhập một bảng duy nhất.
dùng10664542

1
với một sự thay đổi sudo hơi khác với điều này, tôi đã kết thúc với một lỗi cấp phép trên kết xuất tệp (đủ logic vì các postgres của người dùng không có quyền ghi trên các thư mục của tôi) và tôi đã gặp lỗi cờ không xác định --ignore-version. Câu trả lời của Prashant Kumar, đơn giản hơn, đã làm việc cho tôi.
JL Peyret

84

Nếu bạn đang dùng Ubuntu,

  1. Đăng nhập vào người dùng postgres của bạn sudo su postgres
  2. 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 postgresngườ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


1
Điều gì nếu bạn muốn tất cả các bảng, mà không phải chỉ định tên của mỗi?
shekeine

3
Chỉ cần loại bỏ tùy chọn -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala

4
Tôi không biết tại sao nhưng tùy chọn -d không hợp lệ cho psql9.3 và lệnh đã cho không hoạt động với tôi. Làm việc một là pg_dump -U tên người dùng db_name -t table_name> fileName .
serkan kucukbay

pg_dump -t <table_name> <database_name> > file.sql
Sriram

@ user10664542: Vui lòng đọc hướng dẫn sử dụng, đặc biệt là phần này: "Với mục đích này, bàn ăn có thể bao gồm các khung nhìn, các khung nhìn cụ thể, các chuỗi và các bảng nước ngoài".
Frank Heikens

42

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.

9 cách sử dụng pg_dump


Tôi không chắc tại sao câu trả lời này được bình chọn, mọi người nhấp vào +1 mà không tự kiểm tra mọi thứ hoặc thử. Vấn đề với câu trả lời này, khiến nó hoàn toàn vô dụng, là giải pháp / lệnh được đưa ra không xuất các chuỗi được tạo trên bảng (khóa chính) và do đó quá trình nhập thất bại. Tôi không biết về một cơ sở dữ liệu PG sản xuất duy nhất ở bất kỳ nơi nào không sử dụng khóa chính với trình tự. Đó là một nửa câu trả lời, không trả lời kỹ lưỡng câu hỏi và yêu cầu công việc bổ sung để xuất / nhập một bảng duy nhất.
dùng10664542

như đã lưu ý ở trên, tôi có một người dùng nghi ngờ mạnh mẽ10664542, mà không có bất kỳ câu trả lời SO nào cho tên của anh ta, nằm ngoài chiều sâu của anh ta ở đây. trong khi trình tự không mang lại các biến chứng bổ sung, đủ các câu trả lời cho các câu trả lời tương tự mà dân gian có thể khiến chúng hoạt động ngay cả khi chúng phải điều chỉnh trình tự sau khi thực tế. nếu tôi phải khôi phục bãi rác của mình, tôi sẽ tìm cách cập nhật id cuối cùng của chuỗi từ 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ó.
JL Peyret

9

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_dumplệnh cho bạn.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


2

Ngoài câu trả lời của Frank Heiken, nếu bạn muốn sử dụng INSERTcâu lệnh thay vì copy from stdin, thì bạn nên chỉ định --insertscờ

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-versioncờ, vì nó không được dùng nữa.


Tôi không chắc tại sao câu trả lời này được bình chọn, mọi người nhấp vào +1 mà không tự kiểm tra mọi thứ hoặc thử. Vấn đề với câu trả lời này, khiến nó hoàn toàn vô dụng, là giải pháp / lệnh được đưa ra không xuất các chuỗi được tạo trên bảng (khóa chính) và do đó quá trình nhập thất bại. Tôi không biết về một cơ sở dữ liệu PG sản xuất duy nhất ở bất kỳ nơi nào không sử dụng khóa chính với trình tự. Đó là một nửa câu trả lời, không trả lời kỹ lưỡng câu hỏi và yêu cầu công việc bổ sung để xuất / nhập một bảng duy nhất.
dùng10664542
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.