SQL を使用した PostgreSQL でのバージョン対応登録されたデータの編集
PostgreSQL のジオデータベース内のバージョン対応登録されたデータを編集するには、バージョン対応ビューから名前付きバージョンを編集する方法と、バージョン対応ビューから DEFAULT バージョンを編集する方法の 2 つがあります。それぞれの編集モデルの説明については、「SQL を使用したバージョン対応登録されたデータの編集のクイック ツアー」をご参照ください。
ほとんど場合、使用する編集モデルは 1 つだけです。ただし、同じシステムで両方のモデルを使用することも可能です。そのため、このワークフローでは、この 2 つの編集モデルの切り替え方法がわかるように、両方の使用方法を説明します。1 つだけを使用する場合は、使用する編集モデルのセクションをお読みください。
DEFAULT バージョンの編集
SQL を使用して DEFAULT バージョンに接続し、バージョン対応ビューを編集することができます。編集セッションを開く必要はありません。編集を開始すると、DEFAULT バージョンの現在の状態に自動的に接続されます。
編集後は、テーブルまたはフィーチャクラスの差分テーブルに他のユーザがアクセスできるようにコミットする必要があります。
次の手順では、バージョン対応ビュー(blic_evw)を編集します。このビューへの編集内容は、バージョン対応登録された blic テーブルの差分テーブルに書き込まれます。編集は数か所しかないため、DEFAULT バージョンに対して行われます。
- SQL クライアントからデータベースに接続します。必ず、データセットとバージョン対応ビューを編集できる権限を持つユーザとして接続してください。
-
SQL を使用してバージョン対応ビューに最初の編集を実行します。
この例では、既存の行が更新され、所有者名のプロパティが変更されています。
UPDATE blic_evw SET propowner = 'C. O. Industry' WHERE lic = 44977;
- 編集をコミットします。
COMMIT;
-
次の編集を行います。
バージョン対応ビューを通して、新しいレコードがテーブルに追加されます。テーブルには ST_Geometry 列(location)があります。
INSERT INTO blic_evw (propowner, date_entered, location) VALUES ( 'Moe Esposito', current_date, sde.ST_Point('point (0.0125662 0.0046711)', 12));
ヒント:INSERT ステートメントでは ObjectID 値を指定しません。バージョン対応ビューでは、使用可能な ObjectID が自動的に取得されて行に挿入されます。
- 編集をコミットします。
COMMIT;
名前付きバージョンの編集
blic フィーチャクラスに更新内容が多数ある場合は、名前付きバージョンでの編集が適しています。
ジオデータベースの名前付きバージョンを編集するのに使用する関数と構文は次のとおりです。
関数 |
目的 |
構文と説明 |
---|---|---|
sde.sde_create_version |
ジオデータベースの名前付きバージョンを作成します。 名前付きバージョン(DEFAULT 以外のバージョン)を編集している場合は、必ず独自の個別バージョンを編集します。複数の編集者がバージョン対応ビューを使用して同じ名前付きバージョンを編集することはできません。 |
SELECT sde.sde_create_version ('<parent_name>', '<child_version>', <rule_code>, <access_code>, '<description>') |
sde.sde_set_current_version |
アクセスするジオデータベース バージョンとステートを設定します。 |
SELECT sde.sde_set_current_version('<child_version>'); |
sde.sde_edit_version |
名前付きバージョンでの編集セッションを開始および終了します。 |
SELECT sde.sde_edit_version('<child_version>',<1 or 2>) 編集セッションを開始するときは 1 を指定し、終了するときは 2 を指定します。 |
SELECT ステートメントのパラメータは次のとおりです。
- <parent_version>: バージョンの作成元となるバージョンです。
- <child_version>: 編集用に作成する名前付きバージョンです。
- <name_rule>: バージョン用に指定された名前をそのまま使用するか(2)、それとも、重複する名前が指定されたときは一意の名前を作成するか(1)を示します。
- <access>: バージョンの権限レベルです。0 はプライベート、1 はパブリック、2 はプロテクトを表します。
- <description>: 子バージョンの説明です。
次の手順では、DEFAULT バージョンから名前付きバージョン(myedits12111)が作成され、blic_evw バージョン対応ビューを通してこのバージョンに編集が加えられています。
-
SQL クライアントから、編集を実行する新しいバージョンを作成します。
SELECT sde.sde_create_version ('sde.DEFAULT', 'myedits12111', 2, 1, 'version for edits');
-
編集セッションで使用するバージョンとして作成した子バージョンを設定します。
SELECT sde.sde_set_current_version('myedits12111');
-
1 を指定して sde_edit_version 関数を実行し、編集セッションを開始します。
1 は編集セッションの開始を意味します。
SELECT sde.sde_edit_version('myedits12111',1);
-
SQL を使用して、バージョン対応ビューに一連の編集を実行します。
INSERT INTO blic_evw (propowner, date_entered, location) VALUES ( 'V. Nay', current_date, sde.ST_Point('point (0.0125699 0.0046700)', 12)); UPDATE blic_evw SET phone1 = '555.111.2345', phone2 = '555.111.6789' WHERE propowner = 'Tella Chomsky'; UPDATE blic_evw SET exp_date = '2020-06-30 17:00:00' WHERE lid = 22903; UPDATE blic_evw SET location = sde.ST_Point('point (0.0125705 0.0046688)', 12)) WHERE lid = 8992; INSERT INTO blic_evw (codenum, propowner) VALUES (456, 'Anjo Badsu'); DELETE FROM blic_evw WHERE lid = 133;
-
編集をコミットします。
COMMIT;
-
sde_edit_version 関数を実行して編集セッションを終了しますが、今回は 2 を指定します。
2 は編集セッションの終了を意味します。
SELECT sde.sde_edit_version('myedits12111',2);
ヒント:1 回の編集セッションで編集できるバージョンは 1 つだけです。たとえば、2 つ目のバージョン(mynewedits など)を編集する場合、この手順で示したように、myedits12111 の編集セッションを閉じる必要があります。その後、sde_set_current_version を呼び出して mynewedits バージョンを指し示し、sde_edit_version を呼び出して編集セッションを開始します。
単一引用符で囲まれたテキストはそのまま解釈されます。したがって、引用符内に入力するテキストは、データベースに格納されているテキストと大文字または小文字が(すべて大文字、すべて小文字、または大文字と小文字が混在する場合で)一致している必要があります。
名前付きバージョンの編集から DEFAULT の編集への切り替え
たとえば、サイトの他のユーザが特定の編集データを即座に参照する必要があるとマネージャから言われた場合など、DEFAULT バージョンに戻って直接編集する必要がある場合は、set_default を呼び出して、DEFAULT バージョンの編集に戻ることができます。DEFAULT に接続している他のユーザは、クライアント接続を更新すると、ただちに DEFAULT に加えられた編集を参照することができます。
ジオデータベースの DEFAULT バージョンを編集するのに使用する関数と構文は次のとおりです。
関数 |
目的 |
構文と説明 |
---|---|---|
sde.set_default |
DEFAULT バージョンが参照しているステートに対する編集に戻ります。 名前付きバージョンまたは DEFAULT バージョンの特定のステートを編集していて、DEFAULT バージョンの現在のステートに対する編集に戻りたい場合、この関数を呼び出します。 |
SELECT sde.set_default |
-
SQL プロンプトで、set_default 関数を実行します。
SELECT sde.set_default;
これで、セッションは、DEFAULT バージョンが参照している現在の状態を編集するように設定されます。
-
blic_evw バージョン対応ビューを編集します。
INSERT INTO blic_evw (propowner, b_name, date_entered, location) VALUES ( 'Ruben Gol', current_date, 'Chez Coiffure', sde.ST_Point ('point (0.0125650 0.0046721)', 12));
-
編集をコミットします。
COMMIT;
DEFAULT バージョンの同じ状態や、その系統の状態を指している他のクライアントは、接続を更新すると、新しいポイント フィーチャを表示できます。
名前付きバージョンの編集のリコンサイルとポスト
名前付きバージョンでの編集が終了したら、ArcGIS を使用して、編集データのリコンサイル、競合の確認および解決、ポストを実行する必要があります。これは、ArcGIS for Desktop で [バージョンのリコンサイル(Reconcile Versions)] ジオプロセシング ツールまたは Python スクリプトを使用して実行します。詳細については、以下のトピックをご参照ください。
編集しているデータが、編集データをベーステーブルに移動するオプションを選択した状態でバージョン対応登録されている場合、リコンサイルして DEFAULT バージョンへポストした後に、編集データはベース テーブルに移行されます。
編集データが DEFAULT バージョンにポストされたら、名前付きバージョンは削除できます。ジオデータベースの DEFAULT バージョンにリコンサイルおよびポストした後に、名前付きバージョンを削除するのに使用する関数と構文は次のとおりです。
関数 |
目的 |
構文と説明 |
---|---|---|
sde.sde_delete_version |
ジオデータベース バージョンを削除します。 |
SELECT sde.sde_delete_version('<child_version>'); |
次の例では、すべての編集データが DEFAULT バージョンにリコンサイルおよびポストされた後で、myedits12111 バージョンを削除しています。
SELECT sde.sde_delete_version('myedits12111');