PostgreSQL のバージョン非対応ジオデータベース データの SQL による編集

ジオデータベースのバージョン非対応テーブルのデータがジオデータベースの振舞いに関与しない場合、そのデータに対して SQL による更新、挿入、削除操作を実行できます。SQL を使用して編集できないデータ タイプとジオデータベースの振舞いについては、「SQL を使用して編集可能なデータの種類」をご参照ください。

ジオデータベースに登録されたデータはすべて、システムによって保守される null でない一意の object ID(行 ID)列を持ちます。SQL を使用してジオデータベースのバージョン非対応テーブルにレコードを挿入するときは、object ID 用の一意な値を設定する必要があります。

この情報を取得するには、ArcSDE の sde_table_registry システム テーブルをクエリして、レコードを挿入するテーブルの登録 ID を取得します。登録 ID を取得したら、テーブルに対応する i テーブルを特定できます。i テーブルは登録 ID 経由でビジネス テーブルに関連付けられているためです。i テーブルは対応するテーブルを所有するユーザのスキーマに格納されています。

INSERT ステートメントで i<registration_id>_get_ids 関数を呼び出して、挿入するレコード用の object ID を生成します。

手順:
  1. psql のような SQL エディタからデータベースにログインします。

    データを編集する権限を持ったユーザとしてデータベースにログインしてください。

  2. sde_table_registry テーブルをクエリして、レコードを挿入するビジネス テーブルの登録 ID を取得します。
    SELECT registration_id 
    FROM sde.sde_table_registry 
    WHERE table_name = 'outbreak' and owner = 'hmoot'; 
    
    registration_id 
          49

    hmoot.outbreak テーブルの登録 ID は 49 です。

  3. i49_get_ids(2,1) 関数を使用して、i49 テーブルから ID を選択します。これは、次の例に示すように、INSERT ステートメント内で入れ子にすることができます。

    この例では、site_id 列が object ID です。

    INSERT INTO hmoot.outbreak (site_id,med_code,num_affected,shape) 
    VALUES 
    ((SELECT o_base_id FROM hmoot.i49_get_ids(2,1)), 
    'v-22a', 
    3, 
    ST_Point('point (12 36))', 12);

    o_base_id は返される object ID です。最初の関数パラメータの 2 は、object ID 値の取得を表す定数です。ここでは他の値を使用しないでください。次の関数パラメータの 1 は、i49 テーブルから object ID を 1 個返すことを示しています。1 件のレコードだけを更新するため、必要な object ID は 1 個だけです。

関連項目


3/6/2012