PostgreSQL データの格納場所を変更する

2021-11-11

PostgreSQL 9.2 でデータベースの保存先を変更する

下記の環境で、PostgreSQLのデータベースの格納場所をデフォルトから違う場所に変更します。
デフォルトの「/var/lib/pgsql/」があるディレクトリのディスクが容量が少ないので、追加ディスクに作成した「/data/pgsql」のディレクトリに変更します

【環境】

  • OS: Cent OS 7.7
  • PostgreSQL 9.2
  • デフォルト保存場所: /var/lib/pgsql/
  • 変更先: /data/pgsql

1.作業開始前にPostgreSQLのDBをバックアップします

# su - postgres -c "/usr/bin/pg_dump testdb > /var/tmp/testdb_bak.db"

2. PostgreSQLのサービスを停止します

# systemctl stop postgresql.service

3.変更先のディスクのディレクトリを作成し、所有者とパーミッションを変更します

# mkdir /data/pgsql
# chown -R postgres:postgres /data/pgsql
# chmod -R 700 /data/pgsql

4.postgresql.service のファイル内の Environment=PGDATAの場所を移動先のディレクトリに指定する

# vim /usr/lib/systemd/system/postgresql.service
#Environment=PGDATA=/var/lib/pgsql/data
Environment=PGDATA=/data/pgsql/data

5.daemon-reloadをリロードする

 # systemctl daemon-reload

6.DBを初期化する

# postgresql-setup initdb

7.PostgreSQLを起動します

# systemctl start postgresql.service

8.レストアするデータベースを作成します

# su - postgres
$ psql
postgres=# create database testdb;
postgres=# \q

9.バックアップしたデータベースをリストアします

$ psql
postgres=# create database testdb;
postgres=# \q

$ psql -U postgres -f /var/tmp/testdb_bak.db testdb

※設定ファイルも初期化されているので、「/var/lib/pgsql/data/postgresql.conf」、「/var/lib/pgsql/data/pg_hba.conf」変更されている場合は、その内容を反映します

設定ファイルをバックアップします
# cp  /data/pgsql/data/postgresql.conf  /data/pgsql/data/postgresql.bak
# cp /data/pgsql/data/pg_hba.conf /data/pgsql/data/pg_hba.bak

デフォルトディレクトリの設定ファイルをコピーします
# cp /var/lib/pgsql/data/postgresql.conf /data/pgsql/data/postgresql.conf
# cp /var/lib/pgsql/data/pg_hba.conf /data/pgsql/data/pg_hba.conf

PostgreSQLを再起動します
# systemctl restart postgresql.service