PostgreSQLスキーマのすべてのテーブルをCSVにダンプするにはどうすればよいですか?


11

多数のスキーマが含まれているデータベースがあり、各テーブルの内容をCSVにダンプしたい。COPYコマンドは知っていますが、スキーマ内のすべてのテーブルを読み取るスクリプトを作成し、それらに対してCOPYを実行する方法がわかりません。

回答:


18

ここにあなたが望むことをすることができるシェルスクリプトがあります:

SCHEMA="myschema"
DB="mydb"

psql -Atc "select tablename from pg_tables where schemaname='$SCHEMA'" $DB |\
  while read TBL; do
    psql -c "COPY $SCHEMA.$TBL TO STDOUT WITH CSV" $DB > $TBL.csv
  done

必ずDB変数とSCHEMA変数を特定のデータベースとスキーマに設定してください。

ラッピングpsqlコマンドは、Aフラグとtフラグを使用して、cコマンドに渡された文字列からテーブルのリストを作成します。


3

すべてのスキーマをエクスポートする必要がある場合、スクリプトは次のとおりです

PGDATABASE="db"
PGUSER="user"

psql -Atc "select schema_name from information_schema.schemata" |\
    while read SCHEMA; do
    if [[ "$SCHEMA" != "pg_catalog" && "$SCHEMA" != "information_schema" ]]; then
        psql -Atc "select tablename from pg_tables where schemaname='$SCHEMA'" |\
            while read TBL; do
                psql -c "COPY $SCHEMA.$TBL TO STDOUT WITH CSV DELIMITER ';' HEADER ENCODING 'UTF-8'" > $SCHEMA.$TBL.csv
            done
    fi
    done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.