まめぞうの技術メモ

IT関連で勉強したことをメモします

postgresql 11 でデータベース全量移行を試してみる

postgresqlでのデータベースの全量移行を試してみたいと思います。

ubuntu server 上のpostgresql 11 から、同じくubuntu server 上のpostgresql 11へ移行します。

postgresql11からpostgresql11へのデータベース移行
postgresql11からpostgresql11へのデータベース移行

以前、以下の記事で紹介した方法で、postgesqlを2台立てています。

tech.mamezou00000.com

移行元の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文であることが分かります。

SQLファイルの中身をviewコマンドで出力
SQLファイルの中身をviewコマンドで出力

これを移行先の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 行)

今回はとても簡単な例でした。移行元もほぼ新品のデータベースでしたので。 色々と設定が入ってくると、難しい箇所も出てくるかもしれません。