29

更新: pg_dump コマンド中にテーブル内のデータを除外できました。データがダンプされるのを待つ必要がないため、データをロードしないよりも高速になります。

--exclude-table-data=event_logs

(PostgreSQL) 9.4.4

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

ダンプには非常に大きく、復元を行うと永遠にかかるテーブルが 2 つあるため、それらをスキップします。

4

4 に答える 4

63

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

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

走る

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

;特定のテーブルを完全に無視したい場合は、特定のテーブル名を持つ行の前に追加するワンライナーを作成できます。

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

于 2016-10-03T12:27:41.093 に答える
13

TL;DR ワンライナー

pg_restore -L <(pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore') -d db_name_where_to_restore /path/to/db/dump

以下は、復元の「todo リスト」を返します。

pg_restore -l /path/to/db/dump 

以下は、除くすべてを返しますtable_to_ignoregrepオプション-vは、一致を逆にします):

pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore'

これは、入力 todo リストを期待するpg_restoreオプションと組み合わせて使用​​できます。-L

pg_restore -L <(pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore') -d db_name_where_to_restore /path/to/db/dump

無視するテーブルが複数ある場合は、次のように grep できます。

pg_restore -l /path/to/db/dump | grep -vE 'TABLE DATA public (table_1|table_2|table_3)'

拡張正規表現を使用する-Eためのオプションがあることに注意してください。grep

于 2019-04-25T08:15:10.503 に答える
9

pg_restoreには除外テーブル パラメーターはありません。含まれているのは、テーブル パラメーターを含めることです。

-t テーブル

--table=テーブル

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

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

于 2016-05-05T05:12:42.493 に答える