仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

サーバ間のデータベース移行

すごく単純に、PostgreSQLサーバの一部のデータベースを移行する必要があって、かなりの数だから pg_dumpall 使ったり、psql コマンドの -l オプションでリストアップしたり……とか一括で処理しようと思った。
でも、該当のサーバでは多数のデータベースが稼働していて、移行するのはその中の一部のデータベースで、かつ名前などには規則性がないので必要なデータベースをリストップしてオペレーションする必要があった……。
ということで、書き捨てfor文でリストアップしたデータベースを別サーバにダンプ&レストアする実行手順をメモしておく。COPY文ではなくINSERT文なのは宗教的なこだわりと過去の思い出からなので意味は無い。INSERTにしたから処理時間が予想以上にかかってしまって、本番系に影響が出るんじゃ、とちょっとヒャっとしたのでした。

$ for DBNAME in db01 db02 db03 db04 db05; do pg_dump --insert --create --format=p -U postgres -h db01.example.com $DBNAME | psql -U postgres -h db02.example.com $DBNAME; done;