web-dev-qa-db-ja.com

pg_dump / pg_restore:異なるPostgreSQLバージョン、別のデータベース名、別のテーブルスペース

古いサーバーから新しいサーバーにデータベースを移動します。

  • 古いものはPostgreSQL 9.1を実行し、新しいものは9.3を持っています。
  • データベース名を変更したい。
  • 新しいデータベースを専用のテーブルスペースに入れたい(古いデータベースはデフォルトです)-インデックスなどを含みます.

残念ながら、私は実験する機会がありません(そして古いサーバーのHDDが故障し始める)ので、私の場合に機能するpg_dump/pg_restoreのオプションを要求します。

6
saabeilin

問題なく移行を完了しました。

ダンプの作成は簡単です:

Sudo -u postgres pg_dump --verbose --no-tablespaces --format=directory --file=/backup/path old_database_name

新しいインスタンスでの復元:まず、新しいテーブルスペースを作成し、そのテーブルスペースにターゲットデータベースを作成します。次に、次のようにダンプをインポートします。

Sudo -u postgres pg_restore --verbose --dbname=new_database_name --jobs=8 /backup/path/

ハードウェア(プロセッサコア、I/Oサブシステムのパフォーマンスなど)に応じて、同時実行ジョブの数を調整できます。

これで、新しいPostgreSQLを実行している新しいサーバー上の専用のテーブルスペースに、名前が異なる別のデータベースのすべてのデータがあります。

6
saabeilin

Pg_dumpを使用しているため、スキーマとデータがダンプされます。

pg_dump -d mydb -f dump_file_name.sql

復元するには、最初にcreatedbを実行してから復元する必要があります。これにより、新しいデータベースを作成するときに新しい名前の問題を解決できます。

createdb mynewdb

テーブルスペースの場合、最初に、新しく作成したデータベースにテーブルスペースを作成する必要があります。

create tablespace 'your_tablespace' location 'your_tablespace_location'

次に、pg_dumpで作成したダンプファイル(dump_file_name.sql)を編集し、SET default_tablespace = ''からSET default_tablespace = 'your_tablespace'

最後に、次のコマンドで復元できます。

psql -d mynewdb -f dump_file_name.sql

2