Vous n'êtes pas identifié(e).

#1 Re : Général » Mise à jour BD postgres depuis QGIS » 13/04/2020 21:27:26

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 :-)

#2 Re : Général » nombre d'objets selon conditions » 13/04/2020 21:26:21

Bonjour,
oui je souhaite mettre à jour automatiquement. Et oui le trigger est bien BEFORE INSERT OR UDAPTE
Manuellement ? comment fait-on ?

#3 Général » nombre d'objets selon conditions » 13/04/2020 19:15:18

HeadTrick24
Réponses : 3

Bonjour,

après plusieurs essais, je n'arrive pas à avoir le bon résultat.
J'ai une table "appui" dans laquelle se trouvent des entités avec une colonne 'etat_appui' et une colonne 'type_pot'.
J'ai une autre table "contour_aerien" dans laquelle se trouve la colonne 'nb_appuis_bt_etudies'.
Les points de la table "appui" se trouvent dans le polygone de table "contour_aerien".
Par géométrie, je souhaite avoir le nombre de point avec les valeurs 'etat_appui'=BON et 'type_pot'=POT_BT dans le polygone de table "contour_aerien".
Sauf que j'obtiens à chaque fois 0...
Evidemment certains objets ont bien les valeurs 'etat_appui'=BON et 'type_pot'=POT_BT


CREATE OR REPLACE FUNCTION public.bt_func()
  RETURNS trigger AS
$BODY$
BEGIN
    select into NEW.nb_appuis_bt_etudies count(etat_appui)
    from appui
    where st_within(NEW.geom, appui.geom) and appui.type_pot LIKE 'POT_BT' and appui.etat_appui like 'BON';
    return NEW;
   
END;

#4 Re : Général » Mise à jour BD postgres depuis QGIS » 10/04/2020 13:55:59

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.

#5 Re : Général » Mise à jour BD postgres depuis QGIS » 10/04/2020 11:18:26

je n'arrive toujours pas à insérer de nouvelles entités

#6 Re : Général » Mise à jour BD postgres depuis QGIS » 10/04/2020 08:24:24

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.

#7 Général » Mise à jour BD postgres depuis QGIS » 10/04/2020 07:20:37

HeadTrick24
Réponses : 9

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

#9 Re : Général » Fonction / déclencheur entre 2 tables » 09/04/2020 22:43:14

Bonjour,
effectivement c'est bien public.adresse

Par contre les entités déjà existantes ne se mettent pas à jour.

#10 Re : Général » Fonction / déclencheur entre 2 tables » 08/04/2020 23:44:17

J'ai trouvé mon bonheur en fouillant sur le net, mais mon champ se remplit quand je crée de nouvelles entités dans la table adresse. Celles déjà présentes ne se mettent pas à jour.
Voici mon code


CREATE OR REPLACE FUNCTION public.nompm_func()
  RETURNS trigger AS
$BODY$
BEGIN
    select into NEW.nom_pm nom_pm from za_pm where st_within(NEW.geom, geom);
    return NEW ;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.nompm_func()
  OWNER TO postgres;


CREATE TRIGGER nompm
  BEFORE INSERT OR UPDATE OF pm
  ON public.suivi_immeuble
  FOR EACH ROW
  EXECUTE PROCEDURE public.nompm_func();

#11 Général » Fonction / déclencheur entre 2 tables » 08/04/2020 21:39:20

HeadTrick24
Réponses : 5

Bonjour, étant novice dans les fonctions / déclencheurs, je sollicite vos compétences.
J'ai des tables, "za_pm" qui est un polygone et "adresse" qui est un point.
Ces deux tables ont un champ "nom_pm".
Les points de la table adresse se trouve géométriquement dans les polygones de la table za_pm.
Comment remplir automatiquement le champ "nom_pm" de la table adresse par le champ "nom_pm" de la table za_pm.
Merci :-)

Pied de page des forums

Propulsé par FluxBB