一連のPostgresデータベーステーブル名をループしてテーブルデータをダンプするシェルスクリプトを開発しています。例えば:
# dump data
psql -h $SRC_IP_ADDRESS -p 5432 -U postgres -c "BEGIN;" AWARE
do
:
pg_dump -U postgres -h $IP_ADDRESS -p 5432 -t $i -a --inserts MYDB >> \
out.sql
done
psql -h $IP_ADDRESS -p 5432 -U postgres -c "COMMIT;" MYDB
ただし、データベースへの同時アクセスが心配です。Postgresにはデータベースロックがないため、(上記のようにpsqlを使用して)ループの周りにBEGINとCOMMITをラップしようとしました。これにより、psqlコマンドから次のようなエラーメッセージが表示されました。
WARNING: there is no transaction in progress
これを達成する方法はありますか?そうでない場合、代替手段は何ですか?
ありがとう!