web-dev-qa-db-ja.com

pg_restore中にテーブルを除外する

PDATE: pg_dumpコマンドを実行しているテーブルのデータを除外できました。データがダンプされるのを待つ必要がないため、データを読み込まないよりも速くなります。

--exclude-table-data=event_logs

(PostgreSQL) 9.4.4

誰かがpg_restoreを実行するときにテーブルを除外する方法を知っていますか? pg_dumpを行うときに、その方法を見つけることができます。しかし、私はダンプをしているのではなく、それらを除外することはできません。

ダンプには2つのテーブルがあり、それらは非常に大きく、リストアを実行すると永久に時間がかかるため、スキップしたいと思います。

20
covard

pg_restore には除外テーブルパラメータがありません。これには、包含テーブルパラメータがあります。

-tテーブル

--table = table

名前付きテーブルの定義またはデータ、あるいはその両方を復元します。複数の-tスイッチで複数のテーブルを指定できます。これを-nオプションと組み合わせて、スキーマを指定できます。

テーブルが多数ある場合は、少しタイプする必要がありますが、リストから名前を除外するだけで特定のテーブルを除外できます。

4
e4c5

私も同じ問題を抱えていました。長いテーブルリスト。いくつかのテーブルからデータを除外します。

私がしたことは次のとおりです:

走る

pg_restore -l $pgdump_file > restore.pgdump.list

そのrestore.pgdump.listファイルをエディターで開き、次の行の前に;を挿入します。

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

そのファイルを保存すると、インポートに使用できるようになります。;で始まるすべての行は無視されます。

pg_restore -L restore.pgdump.list | psql

特定のテーブルを完全に無視したい場合は、特定のテーブル名を持つ行の前に;を1行で追加することができます。

man pg_restoreも、ドキュメントの最後の例でこれについて説明しています。

42

ここでコマンドは機能しませんでした:

pg_restore -L restore.pgdump.list | psql

jesper Grann Laursenが答えました!

ここでは、次のシーケンスに従って機能しました。

pg_restore -l $pgdump_file > restore.pgdump.list

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

pg_restore -v -L restore.pgdump.list -d dbname pgdump.file

他の回答に基づくワンライナーは次のとおりです。

pg_restore -L <(pg_restore -l ~/base.bck | grep -ivE 'TABLE DATA public (exclude_tbl_name|exclude_tbl_name_2|exclude_tbl_name_3)') -d base_truncated ~/base.bck
0
user3132194