Mise à jour de données non versionnées de géodatabase dans PostgreSQL avec SQL
Vous pouvez utiliser SQL pour mettre à jour, insérer des données et supprimer des données de tables non versionnées dans la géodatabase si elles ne participent pas au comportement de la géodatabase. Reportez-vous à la rubrique Type de données pouvant être modifié avec SQL pour plus d'informations sur les types de données et de comportement de géodatabase que vous ne pouvez pas modifier avec SQL.
Toutes les données enregistrées avec la géodatabase possèdent une colonne d'identifiant d'objet (ID de ligne) gérée par le système, unique et non nulle. Lorsque vous utilisez SQL pour insérer des enregistrements dans des tables non versionnées de la géodatabase, vous devez fournir une valeur unique pour la colonne d'identifiant d'objet.
Pour obtenir ces informations, interrogez la table système sde_table_registry d'ArcSDE pour obtenir l'ID d'enregistrement de la table dans laquelle vous souhaitez insérer un enregistrement. Une fois que vous avez l'ID d'enregistrement, vous pouvez identifier la table i correspondant à la table, car les tables i sont associées à leur table métier par le biais de l'ID d'enregistrement. La table i est stockée dans la structure de l'utilisateur qui possède la table correspondante.
Appelez la fonction i<registration_id>_get_ids dans l'instruction INSERT pour générer le prochain identifiant d'objet de l'enregistrement inséré.
-
Connectez-vous à la base de données à partir d'un éditeur SQL, tel que psql.
Connectez-vous à la base de données avec un nom d'utilisateur autorisé à modifier les données.
-
Interrogez la table sde_table_registry pour déterminer l'ID d'enregistrement de la table métier dans laquelle vous souhaitez insérer un enregistrement.
SELECT registration_id FROM sde.sde_table_registry WHERE table_name = 'outbreak' and owner = 'hmoot'; registration_id 49
L'ID d'enregistrement de la table hmoot.outbreak est 49.
-
Sélectionnez un identifiant dans la table i49 à l'aide de la fonction i49_get_ids(2,1). Elle peut être imbriquée dans votre instruction INSERT, comme le montre l'exemple suivant :
Dans cet exemple, la colonne site_id est l'identifiant d'objet.
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 est l'identifiant d'objet à renvoyer. La valeur 2 dans la fonction est une constante qui indique que vous souhaitez une valeur d'identifiant d'objet. N'utilisez pas d'autre valeur à cet endroit. La valeur 1 indique que vous voulez qu'un identifiant d'objet soit renvoyé par la table i49. Comme vous ne mettez à jour qu'un seul enregistrement, vous avez besoin d'un seul identifiant d'objet.