pg_dump コマンドを使用して作成したアーカイブ ファイルからデータベースを復元するには、pg_restore コマンドを使用します。必ず、テスト データベースでバックアップおよび復旧モデルをテストしてください。
ジオデータベースまたは ST_Geometry がインストールされたデータベースを復元する場合、最初に public スキーマ、次に sde スキーマ、最後にその他のスキーマという順序でスキーマを復元する必要があります。
構文のオプションなど一般的な復元方法については、PostgreSQL のドキュメントをご参照ください。また、PostGIS がインストールされていて、ジオメトリまたはジオグラフィ格納を使用する場合は、データベースのバックアップ作成と復元に関する PostGIS のドキュメントを必ずお読みください。ArcGIS のバージョンによって手順が異なることがあります。
- データベース名は、PostgreSQL データベース クラスターにおいて一意である必要があります。そのため、同じデータベース クラスターに復元する場合、既存のデータベースを削除する必要があります。
dropdb –U sde mypgdb
- 新しいデータベース クラスターに復元する場合、psql にログインし、sde ログイン ロールを再作成してから、それにスーパーユーザー権限を付与します。
CREATE ROLE sde LOGIN ENCRYPTED PASSWORD '0shallpass' SUPERUSER INHERIT;
- 新しいデータベース クラスターに復元する場合、すべてのデータ所有者のログイン ロールを再作成します。このとき、編集者および読み取り専用のログイン ロールを作成することもできますが、それらのログイン ロールはデータベースの復元には不要です。
以下のサンプル スクリプトを実行して、データ所有者、編集者、および読み取り専用のログイン ロールを作成し、それらのログイン ロールをグループ化して適切なグループに追加します。
--Re-create dataowners group and login roles. CREATE ROLE dataowners NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; CREATE ROLE owner1 LOGIN ENCRYPTED PASSWORD 'pw.4.owner1' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT dataowners TO owner1; CREATE ROLE owner2 LOGIN ENCRYPTED PASSWORD 'pw.4.owner2' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT dataowners TO owner2; --Re-create editors group and login roles. CREATE ROLE editors NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; CREATE ROLE editor1 LOGIN ENCRYPTED PASSWORD 'pw.4editor1' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT editors TO owner1; CREATE ROLE owner2 LOGIN ENCRYPTED PASSWORD 'pw.4editor2' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT editors TO editor2; --Re-create readers group and login roles. CREATE ROLE readers NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; CREATE ROLE reader1 LOGIN ENCRYPTED PASSWORD 'pw.4reader1' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT readers TO reader1; CREATE ROLE owner2 LOGIN ENCRYPTED PASSWORD 'pw.4reader2' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT readers TO reader2;
- 新しいデータベース クラスターに復元する場合、必ず st_geometry ライブラリを PostgreSQL の lib の場所に配置してください。st_geometry ライブラリの配置の詳細については、「Linux での PostgreSQL のジオデータベースの作成」または「Windows での PostgreSQL のジオデータベースの作成」をご参照ください。
- データベースを再作成します。これを行うには、コマンド ラインまたは psql ステートメントで createdb ステートメントを使用します。
メモ:
新しいデータベースには、必ず復元対象のデータベースと同じプロパティ (名前、エンコーディング、所有者など) を設定します。
次の例では、createdb コマンド ライン ツールを使用し、UTF8 エンコーディングを指定して mypgdb という名前のデータベースを作成しています。このデータベースは sde ログイン ロールが所有し、テーブルスペース tblspgdb に置かれます。
createdb –U sde –E UTF8 –D tblspgdb -O sde mypgdb
- 再び psql にログインし、sde ログイン ロールが所有する sde スキーマを新しいデータベース内に作成します。sde スキーマに対する使用権限を、ジオデータベースにアクセスするすべてのログイン ロールまたはグループに付与します。
CREATE SCHEMA sde AUTHORIZATION sde; GRANT USAGE ON SCHEMA sde TO dataowners; GRANT USAGE ON SCHEMA sde TO editors; GRANT USAGE ON SCHEMA sde TO readers;
- sde スキーマを含むように新しいデータベースの検索パスを変更します。
ALTER DATABASE mypgdb SET SEARCH_PATH="$user",sde,public;
- コマンド ラインで pg_restore コマンドを使用して、public スキーマとそのデータを復元します。スーパーユーザー権限を持つログイン (postgres ユーザーや sde ユーザーなど) を使用してコマンドを実行します。
注意:
public スキーマとそのコンテンツを最初に復元する必要があります。最初に復元しない場合、一部の空間データが復元されません。次に、sde スキーマを復元します。これを行わないと、空間インデックスがフィーチャクラスに再作成されません。
たとえば、mypgdb1031.dump というデータベースのバックアップ ファイルの public スキーマをデータベース mypgdb に復元するには、次を実行します。
pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
- 次に、sde スキーマのデータを復元します。
pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
- 最後に、残りのスキーマとそのデータを復元します。
pg_restore –U sde –d mypgdb mypgdb1031.dump
- データベースの復元が完了したら、ArcGIS Desktop からデータベースに接続しデータを確認してテストします。