PostgreSQL のバージョン非対応ジオデータベース データの SQL による編集
ジオデータベースのバージョン対応登録されていないテーブルのデータがジオデータベースの振舞いに関与しない場合、そのデータに対して SQL による更新、挿入、削除操作を実行できます。SQL を使用して編集できないデータ タイプとジオデータベースの振舞いについては、「SQL を使用して編集可能なデータの種類」をご参照ください。
ジオデータベースに登録されたデータはすべて、システムによって保守される NULL でない一意の ObjectID(Row ID)フィールドを持ちます。SQL を使用してジオデータベースのバージョン対応登録されていないテーブルにレコードを挿入するときは、ObjectID 用の一意な値を設定する必要があります。
この情報を取得するには、ArcSDE の sde_table_registry システム テーブルをクエリして、レコードを挿入するテーブルの登録 ID を取得します。登録 ID を取得したら、テーブルに対応する i テーブルを特定できます。i テーブルは登録 ID 経由でビジネス テーブルに関連付けられているためです。i テーブルは対応するテーブルを所有するユーザのスキーマに格納されています。
INSERT ステートメントで Next_RowID 関数を指定して、次に有効な値を ObjectID フィールドに入力します。
次に使用可能な ObjectID は、必ずしも最後に挿入した ObjectID に連続する番号ではありません。一部のクライアント アプリケーションではバッチ操作で ObjectID が割り当てられます。そのため、次に使用可能な ObjectID は、最後に使用した ObjectID から大きく離れた数字になることがあります。また、バッチで使用しなかった ObjectID は、使用可能な値のプールに戻されます。つまり、次に使用可能な ObjectID 値が、実際には、最後に挿入した ObjectID 値より小さくなることもあります。
-
psql のような SQL エディタからデータベースにログインします。
データを編集する権限を持ったユーザとしてデータベースにログインしてください。
-
Next_RowID 関数を使用して、ObjectID フィールドに値を入力します。
この例では、site_id 列は ObjectID フィールド、テーブルは outbreak です。テーブルは、hmoot スキーマに格納されます。
INSERT INTO hmoot.outbreak (site_id, med_code,num_affected, shape) VALUES (sde.next_rowid('hmoot', 'outbreak'), 'v-22a', 3, ST_Point('point (12 36))', 12);
- 編集を続けます。編集が完了した場合は、編集内容をデータベースにコミットします。