前回の記事から、こうした方がより汎用的だろうとか、ベターだろうと思う点を修正し手順に起こしました。
https://qiita.com/reo_01/items/1eb631596e867aebf3a5
■前提条件
- 移行元ユーザには、superuserの
postgres
以外に移行するDBにアクセス権限のあるreotest
の2つのユーザが存在する。 - postgresは今回使わないので、移行しない。(後のプロセスで削除する)
- 今回移行するDBは
HogeFugaDB
- 移行先のホストは
hogefuga-azure.postgres.database.azure.com
- 移行先で管理者権限を持つユーザは
hogefuga_admin
です。必要に応じて読み替えてください。
■手順
移行先サーバーに移行元と同名のDBを作成しておく。
● ユーザを移行する。
- 以下を実行し、バックアップファイルを生成する。
(ローカル以外の場合はホストもちゃんと指定する)
pg_dumpall -r --host=localhost --port=5432 --username=postgres --database=HogeFugaDB>(任意のファイル名).sql
-
出力したファイルを編集し NOSUPERUSER および NOBYPASSRLS オプションを削除する。(このオプションを宣言しなくてもデフォルトで同じ設定になるっぽい。バックアップ出力時に改めて宣言されるが、形式だけでも宣言されているとsuperuserをどうにかする権限がない的なエラーが出る)
-
以下を実行すると、ユーザの移行が完了する。ユーザの新規作成から行うため、既にユーザが存在している場合等エラーが出る。
psql -f (先に生成したファイル名).sql --host=hogefuga-azure.postgres.database.azure.com --port=5432 --username=hogefuga_admin --dbname=HogeFugaDB
● Functionおよびデータを移行する。
- 以下を実行し、バックアップファイルを生成する。
pg_dump -Fc -v --host=localhost --username=postgres --dbname=HogeFugaDB -f (任意のファイル名).dump
- 以下を実行すると、Functionおよびデータの移行が完了する。
pg_restore -v --no-owner --host=hogefuga-azure.postgres.database.azure.com --port=5432 --username=hogefuga_admin --dbname=HogeFugaDB (先に生成したファイル名).dump
● DB接続先を変更する。
- 移行元DBを使用していたアプリケーションのDB接続先を移行先に変更する。
- ユーザも一緒に移行しているので、ホストを書き換えるだけでOK。