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

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

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

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

  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. データベースを再作成します。これを行うには、コマンド ラインまたは psql ステートメントで createdb ステートメントを使用します。
    注意注意:

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

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

    createdb U sde E UTF8 D tblspgdb -O sde mypgdb
    
  5. 再び psql にログインし、sde ログイン ロールが所有する sde スキーマを新しいデータベース内に作成します。sde スキーマに対する使用権限を、ジオデータベースにアクセスするすべてのログイン ロールまたはグループに付与します。
    CREATE SCHEMA sde
      AUTHORIZATION sde;
    
    GRANTE USAGE ON SCHEMA sde TO dataowners;
    GRANTE USAGE ON SCHEMA sde TO editors;
    GRANTE USAGE ON SCHEMA sde TO readers;
    
  6. コマンド ラインで pg_restore コマンドを使用して、public スキーマとそのデータを復元します。スーパーユーザ権限を持つログイン(postgres ユーザや sde ユーザなど)を使用してコマンドを実行します。
    注意注意:

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

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

    pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
    
  7. 次に、sde スキーマのデータを復元します。
    pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
    
  8. 最後に、残りのスキーマとそのデータを復元します。
    pg_restore U sde d mypgdb mypgdb1031.dump
    
  9. 再び psql にログインし、復元されたデータベースの検索パスを、sde スキーマを含むように変更します。
    ALTER DATABASE mypgdb
      SET SEARCH_PATH="$user",sde,public;
    
  10. データベースの復元が完了したら、ArcGIS for Desktop からデータベースに接続しデータを確認してテストします。

関連トピック

5/10/2014