プリザンターで異なる環境へデータベース(PostgreSQL)をリストアしたい

## はじめに
環境Aで取得したバックアップを環境Bへもっていき、リストアを試みたがエラーとなり、うまくリストアが出来なかったため、その対応方法について備忘録として残します。

## どんなエラー
"Implem.Pleasanter_Owner" が存在しない旨のエラーが出る。下記は一部抜粋。
```
$ pg_restore -d Implem.Pleasanter /backup/Implem.Pleasanter.dump
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 210; 1259 16468 TABLE AutoNumberings Implem.Pleasanter_Owner
pg_restore: error: could not execute query: ERROR:  role "Implem.Pleasanter_Owner" does not exist
Command was: ALTER TABLE public."AutoNumberings" OWNER TO "Implem.Pleasanter_Owner";
```
## バックアップ
環境Aで以下のコマンドでデータベースのバックアップを取得する。
```bash
su - postgres
psql -U postgres
```
```bash
pg_dump -Fc Implem.Pleasanter > /backup/Implem.Pleasanter.dump
```

上記のバックアップはデータベースのみのバックアップであるため、ロールもバックアップを取得する。
```bash
pg_dumpall --roles-only > /backup/Implem.Pleasanter_role.dump
```

環境Aで取得した2ファイル(Implem.Pleasanter.dump,Implem.Pleasanter_role.dump)を環境Bの/backup ディレクトリへコピーする。

## リストア
環境Bでデータベースを作成する。
```bash
su - postgres
psql -U postgres
```
```
create database "Implem.Pleasanter";
```
データベースが作成されていることを確認。
```
postgres=# \l
                                      List of databases
       Name        |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-------------------+----------+----------+-------------+-------------+-----------------------
 Implem.Pleasanter | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 postgres          | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0         | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
                   |          |          |             |             | postgres=CTc/postgres
 template1         | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
                   |          |          |             |             | postgres=CTc/postgres
(4 rows)

postgres=#
```

以下のコマンドでロールおよび、データベースのリストアを行う。
```bash
psql -f /backup/Implem.Pleasanter_role.dump
pg_restore -d Implem.Pleasanter /backup/Implem.Pleasanter.dump
```

ロールおよび、データベースが復元されていることを確認する。
```bash
su - postgres
psql -U postgres
```
```
postgres=# \du
                                          List of roles
        Role name        |                         Attributes                         | Member of
-------------------------+------------------------------------------------------------+-----------
 Implem.Pleasanter_Owner | Password valid until infinity                              | {}
 Implem.Pleasanter_User  | Password valid until infinity                              | {}
 postgres                | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=#
```
```
postgres=# \l
                                      List of databases
       Name        |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-------------------+----------+----------+-------------+-------------+-----------------------
 Implem.Pleasanter | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 postgres          | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0         | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
                   |          |          |             |             | postgres=CTc/postgres
 template1         | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
                   |          |          |             |             | postgres=CTc/postgres
(4 rows)

postgres=#
```