現実モデリング

データとかエンジニアリングとか健エミュとか

Postgresのデータを`pg_dump`する際に詰まったメモ

PostgresSQLとしてSupabaseの有料プランを利用しているが、主にコストの観点で厳しくなってきた。 今はPostgres上にあるデータをCloudflare D1に移行しようとしており、その過程でPostgres上にあるデータをダンプする pg dumpをしようとしたが、実行で手間取ったのでメモを残す。

コマンド

詳しくはpg_dumpの公式ドキュメントを参照

www.postgresql.jp

docker run --rm -it --network host -v $(pwd):/tmp postgres:15 pg_dump \
  -h host_name \
  -U user_name \
  -d db_name \
  -p 6543 \
  -f /tmp/dump.sql \
  --schema=public \
  --no-owner \
  --inserts
  • バージョン互換で躓いたため、最終的に postgresのDockerイメージを利用する形で実行した
    • クライアント側で利用しているpgのバージョンとサーバー側のバージョンが合わない場合、pg_dump: error: aborting because of server version mismatch となり、エラーになって実行できない
    • 解消する方法はあるが、正直面倒なのでDockerイメージを使った
    • バージョン 15 の部分はクラウド側のPostgresのバージョンに合わせて変更することを想定している
  • オプションについてはお好みで
    • SQLiteにはCOPY INTO文がないため、-inserts オプションをつけて INSERT INTO 文でデータをコピーするようにしている
    • テーブルの権限を委譲する ALTER TABLE 文は必要ないため、 -no-ownerオプションをつけている