FAQ:PostgreSQL データベース バックアップ・リストア手順(Docker利用)
## 前提条件
1. 本手順はユーザマニュアルのインストール手順でDockerに構築したプリザンターのデータベース(Implem.Pleasanter)を対象としています。
1. Linuxに直接インストールしたPostgreSQLのデータベース バックアップ・リストア手順は[FAQ:PostgreSQL データベース バックアップ・リストア手順](/ja/manual/faq-postgresql-backup-restore)を参照してください。
## 概要
バックアップを取得した環境と同じ環境にリストアを行う場合は以下の通りです。本手順では、ダンプファイルをコンテナ外でも保存・利用できるように、ホスト側のフォルダにもダンプファイルを出力します。
## 操作手順
1. バックアップ
2. リストア
### 1. バックアップ
1. 以下コマンドを実行し、DBのコンテナを停止します。
```
docker compose stop db
```
2. compose.yamlにバックアップファイルを出力するフォルダおよびボリュームの情報を追記します。この手順では /backup ディレクトリ配下に取得します。
```text
services:
db:
volumes:
- ./backup:/backup ←この記述を追記する。
```
3. バックアップファイルを取得するホスト側のフォルダを作成します。

4. 以下コマンドを実行し、ボリュームに/backupディレクトリを追加して再作成・再起動します。
```
docker compose up -d db
```
5. 以下コマンドを実行し、DBのコンテナ内に入ります。
```
docker compose exec -u postgres db bash
```
6. コマンドを実行しバックアップファイルを取得します。
```
pg_dump -Fc Implem.Pleasanter > /backup/Implem.Pleasanter.dump
```
7. 以下コマンドを実行し、コンテナのディレクトリにバックアップファイルが作成されたことを確認します。
```
ls -la /backup/Implem.Pleasanter.dump
```
実行結果例
`-rw-r--r-- 1 postgres postgres 648849 May 08 06:25 /backup/Implem.Pleasanter.dump`
8. ホストのフォルダにバックアップファイルが作成されたことを確認します。

9. DBのコンテナから退出します。
```
exit
```
### 2. リストア
1. 以下コマンドを実行し、プリザンターのコンテナのみ停止します。
```
docker compose stop pleasanter
```
2. 以下コマンドを実行し、DBのコンテナ内に入ります。
```
docker compose exec -u postgres db bash
```
3. リストア後切り戻せるように、上記バックアップ手順と同様のコマンドでバックアップを取得します。
```
pg_dump -Fc Implem.Pleasanter > 【リストア前に取得するバックアップファイルの出力先パス/ファイル名】
```
4. SQLでデータベース(Implem.Pleasanter)を削除、再作成を行います。
```
psql -U postgres -c 'drop database "Implem.Pleasanter";'
psql -U postgres -c 'create database "Implem.Pleasanter";'
```
5. リストアのコマンドを実行します。この手順では /backup ディレクトリ配下のバックアップファイルでデータベースを復元します。
```
pg_restore -d Implem.Pleasanter /backup/Implem.Pleasanter.dump
```
6. DBのコンテナから退出します。
```
exit
```
7. プリザンターのコンテナを再起動します。
```
docker compose start pleasanter
```