Tạo một kết xuất cơ sở dữ liệu cho các bảng và mục nhập cụ thể Postgres


94

Tôi có một cơ sở dữ liệu với hàng trăm bảng, những gì tôi cần làm là xuất các bảng được chỉ định và chèn các câu lệnh cho dữ liệu vào một tệp sql.

Tuyên bố duy nhất tôi biết có thể đạt được điều này là

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

Tôi có nên chạy câu lệnh này cho từng và mọi bảng hay có cách nào chạy một câu lệnh tương tự để xuất tất cả các bảng đã chọn thành một sql lớn không. Pg_dump ở trên không xuất lược đồ bảng chỉ chèn, tôi cần cả hai

Bất kỳ trợ giúp sẽ được đánh giá cao.

Câu trả lời:


160

Ngay từ sách hướng dẫn : " Có thể chọn nhiều bảng bằng cách viết nhiều -t chuyển mạch "

Vì vậy, bạn cần liệt kê tất cả các bảng của mình

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

Lưu ý rằng nếu bạn có một số bảng có cùng tiền tố (hoặc hậu tố), bạn cũng có thể sử dụng các ký tự đại diện để chọn chúng với -ttham số:

" Ngoài ra, tham số bảng được hiểu là một mẫu theo cùng các quy tắc được sử dụng bởi lệnh \ d của psql "


20
công tắc -T cũng tương tự như vậy nhưng được sử dụng để loại trừ các bảng. Có thể có ích nếu bạn cần tất cả ngoại trừ một hoặc hai bảng, vv
Scott Marlowe

4
Các -Dtùy chọn dường như đã biến mất trong PG 9.1 trở đi
Epigene

5
Các -Dtùy chọn được loại bỏ trong phiên bản 8.4 . Bạn phải sử dụng --column-insertsngay bây giờ để thay thế.
mlovic 14/09/16

1
Thử pg_dump --host 127.0.0.1 --port 5432 --username "<username>" --column-insertts --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> * "" <tablename> "
Tharindu Jayasuriya

22

Nếu các bảng cụ thể đó khớp với một regex cụ thể, Bạn có thể sử dụng tùy chọn regex in -t trong pg_dump.

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

Ví dụ: để kết xuất các bảng bắt đầu bằng "test", bạn có thể sử dụng

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
nếu nó là một regex, không nên ^test.*thay vì nó ^test*?
msrd0

5
Nó không phải là regex, nó sử dụng "các mẫu" của postgres, vì vậy nó thực sự nên là "test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm 13/02/19

Không đáng kể khi sử dụng regex, tạo ra biểu thức chính quy không hợp lệ: lỗi không hợp lệ toán hạng định lượng . Nhưng biểu thức chính quy là chính xác ... Chỉ những regex rất đơn giản mới hợp lệ
Peter Krauss
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.