はじめに
オンプレミスのPostgreSQLをAzureのクラウド環境に移行することになった。DBはある程度触った事があるが、クラウドについての知識は一切なく、移行も慣れていなかったので自分がやったことをまとめておくことにする。
Azure Database for PostgreSQLのセットアップ
まずは、Azure Database for PostgreSQLのインスタンスを作る。
Azure portalから、リソースの作成>データベース>Azure Database for PostgreSQLを開き、フレキシブルサーバーを選択して作成する。(単一サーバーは将来的に廃止される模様)
その後、インスタンス概要ページからデータベースを選択し、移行元データベースと同名のデータベースを新規に追加する。
データベースのバックアップ
オンプレミスデータベースのSQLファイルをエクスポートする。
psqlでもpg_dumpでも同じようなことができるっぽいが、pg_dumpの方が本来の使い方に適しているのでそちらを使うことにする。
pg_dump dbname=<データベース名> -U <ユーザ名> --clean -f <任意のファイル名>
pg_dumpall -U <ユーザ名> --roles-only --clean -f <任意のファイル名>
pg_dump
コマンドでテーブルやそのレコード、ファンクションのバックアップを取ることができ、pg_dumpall --roles-only
コマンドでユーザーアカウントのバックアップを取れる。
データベースのリストア
Azure Database for PostgreSQLへSQLファイルをインポートする。
今回はpgAdmin4を使った。Azure database for PostgreSQLインスタンスへ接続し、移行元データベースと同名のデータベースを右クリックし、Query Toolを開き、フォルダアイコンからバックアップファイルをインポートする。
アプリケーションの設定変更
あとはアプリケーションのDB接続先を移行先のものに変えてあげて完了。
最後に
調べると色んなやり方が出てきてどれを採用したらいいか迷った。データ容量の多いものには不向きとか、ダウンタイムが長いとか、それぞれ特徴があるらしかったが、今回はとりあえず簡単に移行できる方法、に焦点を当ててやってみた。