多数のスキーマが含まれているデータベースがあり、各テーブルの内容をCSVにダンプしたい。 COPYコマンドは知っていますが、スキーマ内のすべてのテーブルを読み取るスクリプトを作成し、それらに対してCOPYを実行する方法がわかりません。
ここにあなたが望むことをすることができるシェルスクリプトがあります:
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コマンドに渡された文字列からテーブルのリストを作成します。
すべてのスキーマをエクスポートする必要がある場合、スクリプトは次のとおりです
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