PostgreSQL でのジオデータベースの復元

pg_dump コマンドを使用して作成したアーカイブ ファイルからデータベースを復元するには、pg_restore コマンドを使用します。 必ず、テスト データベースでバックアップおよび復旧モデルをテストしてください。

ジオデータベースまたは ST_Geometry がインストールされたデータベースを復元する場合、最初に public スキーマ、次に sde スキーマ、最後にその他のスキーマという順序でスキーマを復元する必要があります。

構文のオプションなど一般的な復元方法については、PostgreSQL のドキュメントをご参照ください。 また、PostGIS がインストールされていて、ジオメトリまたはジオグラフィ格納を使用する場合は、データベースのバックアップ作成と復元に関する PostGIS のドキュメントを必ずお読みください。 PostGIS のバージョンによって手順が異なることがあります。

  1. データベース名は、PostgreSQL データベース クラスターにおいて一意である必要があります。そのため、同じデータベース クラスターに復元する場合、既存のデータベースを削除する必要があります。
    dropdb –U sde mypgdb
  2. 新しいデータベース クラスターに復元する場合、psql にログインし、sde ログイン ロールを再作成してから、それにスーパーユーザー権限を付与します。
    CREATE ROLE sde LOGIN 
      ENCRYPTED PASSWORD '0shallpass'
      SUPERUSER INHERIT;
  3. 新しいデータベース クラスターに復元する場合、すべてのデータ所有者のログイン ロールを再作成します。 このとき、編集者および読み取り専用のログイン ロールを作成することもできますが、それらのログイン ロールはデータベースの復元には不要です。

    以下のサンプル スクリプトを実行して、データ所有者、編集者、および読み取り専用のログイン ロールを作成し、それらのログイン ロールをグループ化して適切なグループに追加します。

    --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;
  4. 新しいデータベース クラスターに復元し、ジオデータベースで ST_Geometry 空間タイプが使用されている場合、必ず st_geometry ライブラリを PostgreSQLlib ディレクトリに配置してください。 st_geometry ライブラリの配置の詳細については、「Linux での PostgreSQL のジオデータベースの作成」または「Windows での PostgreSQL のジオデータベースの作成」をご参照ください。
  5. データベースを再作成します。 これを行うには、コマンド ラインまたは psql ステートメントで createdb ステートメントを使用します。
    注意:

    新しいデータベースには、必ず復元対象のデータベースと同じプロパティ (名前、エンコーディング、所有者など) を設定します。

    次の例では、createdb コマンド ライン ツールを使用し、UTF8 エンコーディングを指定して mypgdb という名前のデータベースを作成しています。このデータベースは sde ログイン ロールが所有し、テーブルスペース tblspgdb に置かれます。

    createdb –U sde –E UTF8 –D tblspgdb -O sde mypgdb
  6. 再び 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;
  7. sde スキーマを含むように新しいデータベースの検索パスを変更します。
    ALTER DATABASE mypgdb
      SET SEARCH_PATH="$user",sde,public;
  8. コマンド ラインで pg_restore コマンドを使用して、public スキーマとそのデータを復元します。 スーパーユーザー権限を持つログイン (postgres ユーザーや sde ユーザーなど) を使用してコマンドを実行します。
    注意:

    public スキーマとそのコンテンツを最初に復元する必要があります。 最初に復元しない場合、一部の空間データが復元されません。 次に、sde スキーマを復元します。 これを行わないと、空間インデックスがフィーチャクラスに再作成されません。

    たとえば、mypgdb1031.dump というデータベースのバックアップ ファイルの public スキーマをデータベース mypgdb に復元するには、次を実行します。

    pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
  9. 次に、sde スキーマのデータを復元します。
    pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
  10. 最後に、残りのスキーマとそのデータを復元します。
    pg_restore –U sde –d mypgdb mypgdb1031.dump
  11. データベースの復元が完了したら、ArcGIS Pro からデータベースに接続しデータを確認してテストします。