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

Standard または Advancedのライセンスで利用可能。

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 editor1;
    
    CREATE ROLE editor2 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 reader2 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. 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 スキーマと sde スキーマおよびそれらのデータを復元します。

    スーパーユーザー権限を持つログイン (postgres ユーザーなど) を使用してコマンドを実行します。

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

    pg_restore -U sde -d mypgdb -n public,sde mypgdb31oct.dump

  9. 最後に、残りのスキーマとそのデータを復元します。

    pg_restore –U sde –d mypgdb mypgdb31oct.dump

  10. データベースの復元が完了したら、ArcGIS Pro からデータベースに接続しデータを確認してテストします。