Posted at

RDSにPostgreSQLのdumpをインポートする

More than 3 years have passed since last update.

現状、スナップショットを他アカウントのRDSにリストア出来ない模様。

→dumpを取得して移行してみる

以下を参考にした。

http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html


  • DB -> PostgreSQL 9.3.5

  • クライアント -> CentOS 6.6


PostgreSQLのクライアント関係パッケージのインストール

クライアント側で必要パッケージのインストール。

http://yum.postgresql.org/rpmchart.php

$ wget http://yum.postgresql.org/9.3/redhat/rhel-6-i386/postgresql93-libs-9.3.5-1PGDG.rhel6.i686.rpm

$ wget http://yum.postgresql.org/9.3/redhat/rhel-6-i386/postgresql93-9.3.5-1PGDG.rhel6.i686.rpm
# yum localinstall postgresql93-libs-9.3.5-1PGDG.rhel6.i686.rpm
# rpm -ivh postgresql93-9.3.5-1PGDG.rhel6.i686.rpm
# pg_dump --version
pg_dump (PostgreSQL) 9.3.5


既存DBのdump取得

クライアント側から既存DBのdumpを取得。

https://www.postgresql.jp/document/9.3/html/app-pgdump.html

$ pg_dump -h xxx-org-db.xxxxxx.ap-northeast-1.rds.amazonaws.com -U app development -f /tmp/development.dump


インポート先のRDSインスタンス起動

なお、以下の設定でインスタンスを作成しておくと、データのインポートが高速になる。


  • バックアップの保持設定を0

  • マルチAZを無効


データベース作成

インポート先のRDSインスタンスにdumpしたデータベースと同名のデータベースを作成。

postgres=> CREATE DATABASE development LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template0;


dumpをインポートする

インポート先のRDSインスタンスにdumpをインポートする。

https://www.postgresql.jp/document/9.3/html/app-psql.html

$ psql -f /tmp/development.dump --host=xxx-new-db.xxxxxx.ap-northeast-1.rds.amazonaws.com 

--port=5432 --username=app --password --dbname=development


データベース名を変更する場合

https://www.postgresql.jp/document/9.3/html/sql-alterdatabase.html

postgres=> ALTER DATABASE development RENAME TO new_database_name