Postgresのデータを`pg_dump`する際に詰まったメモ
AI要約
SupabaseからCloudflare D1への移行時にpg_dumpのバージョン不一致で躓き、Dockerイメージで回避した手順とSQLite向けオプション設定のメモ。
PostgresSQLとしてSupabaseの有料プランを利用しているが、主にコストの観点で厳しくなってきた。 今はPostgres上にあるデータをCloudflare D1に移行しようとしており、その過程でPostgres上にあるデータをダンプする pg dumpをしようとしたが、実行で手間取ったのでメモを残す。
コマンド
詳しくはpg_dumpの公式ドキュメントを参照
External Linkwww.postgresql.jppg_dumppostgresql.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のバージョンに合わせて変更することを想定している
- クライアント側で利用しているpgのバージョンとサーバー側のバージョンが合わない場合、
-
オプションについてはお好みで
- SQLiteには
COPY INTO文がないため、-insertsオプションをつけてINSERT INTO文でデータをコピーするようにしている - テーブルの権限を委譲する
ALTER TABLE文は必要ないため、-no-ownerオプションをつけている
- SQLiteには