postgresqlでのデータベースの全量移行を試してみたいと思います。
ubuntu server 上のpostgresql 11 から、同じくubuntu server 上のpostgresql 11へ移行します。
以前、以下の記事で紹介した方法で、postgesqlを2台立てています。
移行元のpostgresqlの詳細
apt-getでインストールしたほぼ新品のpostgresqlに、新しいデータベース「testdb」を作ってあります。
「testdb」の中に、一つだけ「test_table」というテーブルを作ってあります。
testdb=# \dt リレーション一覧 スキーマ | 名前 | 型 | 所有者 ----------+------------+----------+---------- public | test_table | テーブル | postgres (1 行)
テーブルの中身は1行だけです。
testdb=# select * from test_table; id ---- 1 (1 行)
移行先のpostgresqlの詳細
もう1台のpostgresqlは、postgresqlをインストールしただけで、設定は何も行っていません。
まっさらな状態です。
pg_dumpallコマンドで移行
今回は全量移行するので、pg_dumpallコマンドを使います。
一部のデータベースのみを移行する場合は、pg_dumpコマンドを使います。
fオプションを付けて出力ファイル名を指定します。
pg_dumpall -f backup.sql
出力形式はsqlとなります。
Viewコマンドで出力してみると、以下のようにSQL文であることが分かります。
これを移行先のpostgresqlに反映します。ファイルを移行先のサーバーにコピーする等してください。
psqlコマンドでリストア
移行先のサーバーで、以下のコマンドを実行してください。fオプションで、リストアするsqlファイルを指定します。
psql -f backup.sql
すごく簡単ですね。データ量にもよって反映に時間がかかる場合があります。
結果を確認してみます。
データベース「testdb」の中に、「test_table」というテーブルがあるのが確認できました。
testdb=# \dt リレーション一覧 スキーマ | 名前 | 型 | 所有者 ----------+------------+----------+---------- public | test_table | テーブル | postgres (1 行)
テーブルの中身もちゃんと移行されていることが分かりました。
testdb=# select * from test_table; id ---- 1 (1 行)
今回はとても簡単な例でした。移行元もほぼ新品のデータベースでしたので。 色々と設定が入ってくると、難しい箇所も出てくるかもしれません。