Bearbeiten nicht versionierter Geodatabase-Daten in PostgreSQL per SQL
Mithilfe von SQL können Sie Daten in der Geodatabase aktualisieren, Daten in die Geodatabase einfügen und Daten aus nicht versionierten Tabellen daraus löschen, falls diese nicht an Geodatabase-Verhalten beteiligt sind. Unter Welcher Datentyp kann mit SQL bearbeitet werden? finden Sie Informationen zu den Typen von Daten und Geodatabase-Verhalten, die Sie nicht per SQL bearbeiten können.
Alle Daten, die unter der Geodatabase registriert sind, verfügen über eine vom System verwaltete, eindeutige Objekt-ID-Spalte (Zeilen-ID), die nicht null ist. Wenn Sie SQL zum Einfügen von Datensätzen in nicht versionierte Tabellen in der Geodatabase verwenden, müssen Sie für die Objekt-ID einen Einzelwert eingeben.
Um diese Informationen zu erhalten, fragen Sie die ArcSDE-Systemtabelle "sde_table_registry" ab und rufen so die Registrierungs-ID der Tabelle ab, in die Sie einen Datensatz einfügen möchten. Nachdem Sie die Registrierungs-ID erhalten haben, können Sie die entsprechende I-Tabelle der Tabelle identifizieren, da I-Tabellen mit ihrer Business-Tabelle über die Registrierungs-ID verknüpft sind. Die I-Tabelle wird im Schema des Benutzers gespeichert, der die entsprechende Tabelle besitzt.
Rufen Sie in der INSERT-Anweisung die Funktion "<registration_id>_get_ids" auf, um die nächste Objekt-ID für den eingefügten Datensatz zu generieren.
-
Melden Sie sich über einen SQL-Editor wie "psql" an der Datenbank an.
Melden Sie sich bei der Datenbank als Benutzer an, der über die Berechtigung zum Bearbeiten der Daten verfügt.
-
Fragen Sie die Tabelle "sde_table_registry" ab, um die Registrierungs-ID der Business-Tabelle zu ermitteln, in die Sie einen Datensatz einfügen möchten.
SELECT registration_id FROM sde.sde_table_registry WHERE table_name = 'outbreak' and owner = 'hmoot'; registration_id 49
Die Registrierungs-ID für die Tabelle "hmoot.outbreak" lautet 49.
-
Wählen Sie mithilfe der Funktion "i49_get_ids(2,1)" eine ID aus der Tabelle "i49" aus. Diese kann wie im folgenden Beispiel in der INSERT-Anweisung geschachtelt werden:
In diesem Beispiel ist die Spalte "site_id" die Objekt-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" ist die Objekt-ID, die zurückgegeben werden soll. Die "2" in der Funktion ist eine Konstante, die angibt, dass Sie einen Objekt-ID-Wert erhalten möchten. Verwenden Sie hierfür keinen anderen Wert. Der Wert "1" gibt an, dass eine Objekt-ID aus der Tabelle "i49" zurückgegeben werden soll. Da Sie nur einen Datensatz aktualisieren, benötigen Sie nur eine Objekt-ID.