Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 10/04/2020 07:20:37
- HeadTrick24
- Membre
Mise à jour BD postgres depuis QGIS
Bonjour,
Je souhaite mettre à jour une table dans postgres en mettant à jour ou en insérant de nouvelles entités.
J'arrive à mettre à jour mais je n'arrive pas à insérer.
Voici mon code
update test_importb
set
geom = (select geom from test_import where test_importb.id_metier_=test_import.id_metier_),
type_pf = (select type_pf from test_import where test_importb.id_metier_=test_import.id_metier_);
insert into test_importb select * from test_import where test_importb.id_metier_<>test_import.id_metier_;
end
et le message d'erreur :
update test_importb
set
geom = (select geom from test_import where test_importb.id_metier_=test_import.id_metier_),
type_pf = (select type_pf from test_import where test_importb.id_metier_=test_import.id_metier_);
insert into test_importb select * from test_import where test_importb.id_metier_<>test_import.id_metier_;
end
Hors ligne
#2 10/04/2020 08:11:04
- rjuju
- Administrateur
Re : Mise à jour BD postgres depuis QGIS
Petite erreur de copier/coller sur le message d'erreur
Julien.
https://rjuju.github.io/
Hors ligne
#3 10/04/2020 08:24:24
- HeadTrick24
- Membre
Re : Mise à jour BD postgres depuis QGIS
le voici
invalid reference to FROM-clause entry for table "test_importb"
LINE 6: ...f) from test_import where test_import.id_metier_<>test_impor...
^
HINT: There is an entry for table "test_importb", but it cannot be referenced from this part of the query.
Hors ligne
#4 10/04/2020 08:42:25
- rjuju
- Administrateur
Re : Mise à jour BD postgres depuis QGIS
Effectivement, vous ne pouvez pas écrire la requête comme ça, il faut utiliser un UPDATE ... FROM ... WHERE. Il y a un exemple d'écriture dans la documentation https://www.postgresql.org/docs/current/sql-update.html
Julien.
https://rjuju.github.io/
Hors ligne
#5 10/04/2020 11:18:26
- HeadTrick24
- Membre
Re : Mise à jour BD postgres depuis QGIS
je n'arrive toujours pas à insérer de nouvelles entités
Hors ligne
#6 10/04/2020 13:13:11
- pifor
- Membre
Re : Mise à jour BD postgres depuis QGIS
Est-ce que cette requête donne le résultat demandé ?
insert into test_importb
select test_import.*
from test_import, test_importb
where test_importb.id_metier_<>test_import.id_metier_;
Pierre
Hors ligne
#7 10/04/2020 13:55:59
- HeadTrick24
- Membre
Re : Mise à jour BD postgres depuis QGIS
voici le message d'erreur
duplicate key value violates unique constraint "test_importb_pkey"
DETAIL: Key (gid)=(541) already exists.
En essayant en sélectionnant les colonnes, j'ai une autre erreur
insert into test_importb
select test_import.id_metier_, test_import.type_pf, test_import.geom
from test_import, test_importb
where test_importb.id_metier_<>test_import.id_metier_;
column "gid" is of type integer but expression is of type character varying
LINE 2: select test_import.id_metier_, test_import.type_pf, test_im...
^
HINT: You will need to rewrite or cast the expression.
Hors ligne
#8 10/04/2020 14:07:03
- pifor
- Membre
Re : Mise à jour BD postgres depuis QGIS
Pour vous aider, il faut avoir la description complète des tables concernées, la correspondance entre les colonnes et un exemple de MAJ: quand est-ce qu'il faut la faire et quand est-ce qu'il ne faut pas la faire.
Dernière modification par pifor (10/04/2020 14:07:23)
Pierre
Hors ligne
#9 10/04/2020 19:32:26
- dverite
- Membre
Re : Mise à jour BD postgres depuis QGIS
Au vu de la tentative du 1er message (qui doit générer une erreur sur l'INSERT, alors que l'UPDATE semble correct):
insert into test_importb select * from test_import where test_importb.id_metier_<>test_import.id_metier_;
l'idée est certainement d'insérer dans test_importb les lignes de test_import dont l'id_metier n'est pas déjà dans la destination.
Ca peut s'écrire:
insert into test_importb select * from test_import where
NOT EXISTS (select 1 FROM test_importb WHERE test_importb.id_metier_ = test_import.id_metier_);
Sinon on peut aussi écrire l'UPDATE et l'INSERT combinés dans une seule instruction INSERT avec une clause ON CONFLICT DO UPDATE s'il y a une contrainte unique sur id_metier_, mais c'est un peu plus compliqué à écrire.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
#10 13/04/2020 21:27:26
- HeadTrick24
- Membre
Re : Mise à jour BD postgres depuis QGIS
Merci pour la requête d'insertion.
Pour l'instant je vais me contenter d'une requête d'insertion et une autre pour les mise à jour.
Je vais creuser pour combiner les deux :-)
Hors ligne
Pages : 1