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 を生成します。
-
psql のような SQL エディタからデータベースにログインします。
データを編集する権限を持ったユーザとしてデータベースにログインしてください。
-
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 です。
-
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 個だけです。