Lorsque j'entre de nouveaux éléments (fonctionnalités) dans un autre calque Postgres, je peux le faire de deux manières:
- Dessiner de nouveaux éléments (avec 'Ajouter une fonctionnalité') que je fais rarement ou
- Copier (ou couper) certains éléments d'un autre calque Postgre (calque source) et le coller dans le calque cible, ce que je fais fréquemment
Dans le premier exemple, l'enregistrement des modifications fonctionne normalement car cette couche obtient un gid à partir de la séquence de base de données postgre * nextval ('layer_name_gid_seq' :: regclass) *
Dans le deuxième exemple, une erreur s'est produite lors de l'enregistrement des modifications, car lors de la copie de l'élément du calque source vers le calque cible, qg est copié gid de l'élément du calque source. Lorsque vous tentez d'enregistrer des modifications, cette erreur est renvoyée:
Impossible de valider les modifications de la couche «Cjevovodi»
Erreurs: ERREUR: 1 fonctionnalité (s) non ajoutée (s).
Erreurs du fournisseur:
erreur PostGIS lors de l'ajout de fonctionnalités: ERREUR: la valeur de clé en double viole la contrainte unique "cjevovodi_okill_pkey"
DÉTAIL: la clé (gid) = (5) existe déjà.
J'ai essayé de copier * nextval ('layer_name_gid_seq' :: regclass) * dans le champ gid, mais cette séquence ne peut pas être collée dans le champ gid car le champ est défini comme numérique.
Est-ce que quelqu'un connaît un moyen simple de copier des éléments de la couche source (avec un gid existant) pour attribuer un nouveau gid?
Merci!
Réponses:
Je ne suis pas en mesure de reproduire cela dans QGIS 2.2 Windows, c3a2817.
Si d'autres versions se comportent différemment, ou si vous continuez à rencontrer ce problème, vous pouvez probablement configurer un déclencheur PostgreSQL sur la table comme solution de contournement:
En utilisant cet exemple de tableau:
Voici une fonction de déclenchement qui en attribuera une nouvelle au
gid
besoin:Liaison de la fonction à la table ...
Cela attribuera automatiquement de nouveaux ID là où ils
gid
existent déjà. Par exemple, la requête suivante va maintenant dupliquer toutes les données de la table au lieu d'échouer:Bien sûr, cette approche peut compromettre l'intention de votre clé primaire, utilisez-la donc avec prudence.
la source
Sélectionnez les entités du calque source et enregistrez la sélection (Enregistrer la sélection sous ...) dans le fichier de formes. Ajoutez le fichier de formes enregistré dans le projet QGIS et ouvrez la table d'attributs, puis supprimez le champ "gid" et enregistrez le fichier de formes. Sélectionnez les entités dans le fichier de formes et copiez-les dans votre couche de travail.
la source