2016-05-04 20 views
8

(PostgreSQL) 9.4.4Loại trừ Bảng trong pg_restore

Bất cứ ai cũng biết làm thế nào để loại trừ một bảng khi thực hiện một pg_restore? Tôi có thể tìm cách thực hiện khi thực hiện pg_dump. Tuy nhiên tôi không phải là người làm bãi rác và không thể loại trừ chúng.

Có 2 bảng trong bãi chứa thực sự lớn và mất mãi mãi khi tôi khôi phục để tôi muốn bỏ qua chúng.

Trả lời

3

pg_restore không có tham số bảng loại trừ, những gì nó có là tham số bảng bao gồm.

bảng -t

--table = bảng

Khôi phục nét và/hoặc dữ liệu của tên chỉ bảng. Nhiều bảng có thể được chỉ định với nhiều công tắc -t. Điều này có thể được kết hợp với tùy chọn -n để chỉ định giản đồ.

Nếu bạn có một số lượng lớn các bảng, nó cho phép nhập bit litte, nhưng nó cho phép bạn loại trừ các bảng cụ thể bằng cách chỉ để tên của chúng ra khỏi danh sách.

+1

Cảm ơn bạn. Vâng, chúng tôi có rất nhiều bảng nhưng tôi đang thực hiện một công việc cào để tự động hóa điều này vì vậy tôi sẽ chỉ phải làm điều đó một lần. Có thể lặp qua các bảng và có danh sách loại trừ của 2 bảng. – covard

17

Tôi gặp vấn đề tương tự. Danh sách bảng dài và tôi muốn loại trừ dữ liệu khỏi một vài bảng.

Những gì tôi đã làm là như sau:

Run

pg_restore -l $pgdump_file > restore.pgdump.list 

mở rằng restore.pgdump.list tập tin trong một trình soạn thảo, và chèn một ; ở phía trước của dòng nói

;2429; 0 27550 TABLE DATA public <table_to_explore> <database> 

Sau khi lưu tệp đó, bây giờ nó có thể được sử dụng để nhập, trong đó tất cả các dòng bắt đầu bằng ; đều bị bỏ qua.

pg_restore -L restore.pgdump.list | psql 

Bạn có thể làm cho một one-liner để thêm ; trước dòng có một tên bảng cụ thể, nếu bạn hoàn toàn muốn bỏ qua một bảng cụ thể.

man pg_restore cũng đang nói về điều này trong ví dụ ở cuối tài liệu.

+0

Cảm ơn bạn, những gì một cuộc sống tiết kiệm! Như đã lưu ý trong 'man pg_restore', khi bạn đã chỉnh sửa tệp' restore.pgdump.list' (từ ví dụ của bạn), bạn có thể gọi 'pg_restore -L db.list db.dump' (trong ví dụ của bạn, bạn gọi 'pg_restore' và đặt nó vào' psql' - tuy nhiên, bạn không chỉ định đường dẫn đến tệp kết xuất ..?) –

+0

Lưu ý rằng điều này đã lưu tôi vì tôi đã cố gắng loại trừ 2 bảng khỏi danh sách 99 bảng đã nhập. 'pg_restore' không cho phép chỉ định các bảng để loại trừ trong quá trình nhập, vì vậy tôi phải gọi nó:' pg_restore -t a_table -t another_table -t yet_another_table', v.v. Cố gắng gọi nó với 97 đối số '' đã phá vỡ với một "quá nhiều đối số" tin nhắn ... :-) Giải pháp 'restore.pgdump.list' của bạn đã hoạt động !! –

+0

Điều này rất hữu ích! Tôi chỉ cần loại trừ dữ liệu từ một bảng: 'báo cáo'.Tôi đã có thể làm một nội tuyến 'grep -v' khi tạo tập tin danh sách. '' 'pg_restore -l $ pgdump_file | grep -v "TABLE DATA báo cáo công khai"> restore.pgdump.list''' –