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


20

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

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


1
データベースの一部を別のドライブに移動する場合は、表領域が最適です。
アーウィンブランドステッター

この答えは、それが示唆するtablespacesべきではありません外付けハードドライブに行く:dba.stackexchange.com/a/62037/41823はすでに、外部にデータを入れているかどうかわから私はリスクを理解しませんか?
Statwonk

回答:


19

次のようにしてください:

  1. PostgreSQLをシャットダウンします
  2. PostgreSQLが実行されなくなったことを確認します
  3. PostgreSQLが本当に停止していることを確認します
  4. 古いデータディレクトリを新しいドライブにコピーする
    これは通常-D、サービスのコマンドラインパラメーター()またはPGDATA環境変数によって定義されます。
  5. PostgreSQL構成(サービス、環境変数)を更新して、新しいデータディレクトリを指すようにします。
  6. データをコピーした場合は、古いデータディレクトリの名前を変更して、PostgreSQLがそれを見つけられないようにします。そうすれば、設定を正しく取得できなかった場合にエラーメッセージが表示されます。
  7. サービスを開始する
  8. すべてが正常に実行されている場合は、古いディレクトリを削除できます。

4番目のポイントでは、「これは通常、コマンドラインパラメーターによって定義されます...」とはどういう意味ですか?
codecool

@codecool:これを定義する方法はいくつかあります。通常、これはサービス定義の一部です。ただし、オペレーティングシステム、配布、および個人的な変更に依存します。
a_horse_with_no_name

これは機能しましたが、Windowsのコマンドラインの代わりにregeditを使用しました。ふう 私のディスクはちょうどスペースを使い果たしようとしていましたが、今では十分なスペースで他の場所で安全に動作しています。
トレンチ

典型的なubuntuおよび9.5 DBバージョンの最新の具体的な詳細を含む素敵なステップバイステップのブログ投稿があります:digitalocean.com/community/tutorials/…– JaakL
1

4
  1. postgresqlサービスを停止します
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user / destination_data_directory
  4. export PGDATA = destination_data_directory
  5. postgresql.conf内でデータディレクトリをdestination_data_directoryに変更する
  6. pg_ctl start

chown新しいフォルダのコマンドを覚えていてよかったです。
RolandoMySQLDBA

0

以下は、既存のPostgreSQLデータベースをArch Linuxの新しい場所(フォルダー、パーティション)に移動する方法の説明です(この手順は他の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データベースを移動する方法」を参照してください。


参照資料

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.