特定のテーブルとエントリのデータベースダンプを作成するPostgres


94

何百ものテーブルを含むデータベースがあります。指定したテーブルをエクスポートし、データのステートメントを1つのSQLファイルに挿入する必要があります。

私が知っている唯一のステートメントはこれを達成することができます

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

このステートメントをすべてのテーブルに対して実行する必要がありますか、それとも同様のステートメントを実行して、選択したすべてのテーブルを1つの大きなSQLにエクスポートする方法がありますか。上記のpg_dumpは、テーブルスキーマをエクスポートせず、挿入するだけです。両方が必要です

どんな助けでもありがたいです。

回答:


160

マニュアルから直接:「複数の-tスイッチを記述することで複数のテーブルを選択できます

したがって、すべてのテーブルを一覧表示する必要があります

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

同じプレフィックス(またはサフィックス)を持つテーブルが複数ある場合は、ワイルドカードを使用して-tパラメータでそれらを選択することもできます。

また、テーブルパラメータは、psqlの\ dコマンドで使用されるのと同じルールに従ってパターンとして解釈されます。


20
-Tスイッチも同じ方法ですが、テーブルを除外するために使用されます。あなたはすべてが、1つのまたは2のテーブルなどが必要な場合に有用であるかもしれない
スコット・マーロウ

4
この-Dオプションは
PG9.1

5
この-Dオプションはバージョン8.4で削除されました--column-inserts代わりに今すぐ使用する必要があります。
mlovic 2016

1
pg_dump --host 127.0.0.1 --port 5432 --username "<username>" --column-inserts --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> *を試してください"" <tablename> "
Tharindu Jayasuriya 2017

22

これらの特定のテーブルが特定の正規表現と一致する場合は、pg_dumpの-tオプションで正規表現を使用できます。

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

たとえば、「test」で始まるテーブルをダンプするには、次を使用できます。

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

3
それが正規表現だった場合、^test.*代わりにすべきではありません^test*か?
msrd0 2018

5
それはそれは本当にする必要がありますので、それは、postgresのの「パターン」を使用して、正規表現ではありません"test*"postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

正規表現を使用するのは簡単ではなく、無効な正規表現を生成します:数量詞オペランドの無効なエラー。しかし、正規表現は正しいです...非常に単純な正規表現のみが有効です
Peter Krauss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.