web-dev-qa-db-ja.com

postgresqlデータを別のドライブに移動する

クラウド環境としてAWSを使用しています。ルートインスタンスボリュームと同じドライブにPostgreSQLをインストールしました。 2つ目のドライブをインスタンスに接続してマウントしました。次に、すべてのPostgreSQLデータを別のドライブに移動します。まだ開発モードなので、この時点で転送が簡単になれば古いデータを削除できます。これを行う最良の方法は何ですか?

PostgreSQLのテーブルスペースは私が見るべきものですか?

21
codecool

以下はそれを行うべきです:

  1. PostgreSQLをシャットダウンする
  2. PostgreSQLが動作しないことを確認します
  3. PostgreSQLが本当に停止していることを確認する
  4. 古いデータディレクトリを新しいドライブにコピーします
    これは通常、コマンドラインパラメータ(-D)サービス用、またはPGDATA環境変数を使用します。
  5. 新しいデータディレクトリを指すようにPostgreSQL設定(サービス、環境変数)を更新します。
  6. データをコピーした場合は、古いデータディレクトリの名前を変更して、PostgreSQLがそれを見つけられないようにします。これにより、構成が正しくない場合にエラーメッセージが表示されます。
  7. サービスを開始する
  8. すべてが正常に動作している場合は、古いディレクトリを削除できます。
20
  1. Postgresqlサービスを停止します
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user/destination_data_directory
  4. pGD​​ATA = destination_data_directoryをエクスポートします
  5. データディレクトリをpostgresql.conf内のdestination_data_directoryに変更する
  6. pg_ctl start
4
adi

Arch Linuxで既存のPostgreSQLデータベースを新しい場所(フォルダー、パーティション)に移動する方法を説明します(この手順は他のLinuxディストリビューションでも同様です)。

pg_dumpallは、クラスターのすべてのPostgreSQLデータベースを1つのスクリプトファイルに書き出す(ダンプする)ユーティリティです。 ...これは、クラスター内のデータベースごとにpg_dumpを呼び出すことによって行われます。 ...

例えば:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL/DR

必要がある:

  • pg_dumpall)データベースのエクスポート
  • 新しいEMPTYディレクトリを作成する
  • postgresql.confファイルを編集する
  • postgresサーバーサービスを再起動します。
  • 古いデータをダンプファイルから新しいデータベースにロードする

コマンドの概要

シェルプロンプト(ホスト名...)を残して、進行中のシェルを明確にします。

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ Sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ Sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ Sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ Sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ Sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ Sudo systemctl restart postgresql
[victoria@victoria postgres]$ Sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

コメント付きのコードと出力については、付随するブログ投稿 Arch Linuxで既存のPostgreSQLデータベースを移動する方法 を参照してください。---


参照

0
Victoria Stuart