LoginSignup
5
3

ちゃんとオンプレのPostgreSQLからAzure Database for PostgreSQLにDBを移行したい

Last updated at Posted at 2023-09-28

前回の記事から、こうした方がより汎用的だろうとか、ベターだろうと思う点を修正し手順に起こしました。
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。
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3