Vous n'êtes pas identifié(e).
Pages : 1
Pff je me complique la vie des fois
Merci !!!
Bonjour c'est encore moi
Je souhaite mettre à jour un champ (proprietaire) d'une table (infraction) et la valeur à renseigner est le résultat d'un SELECT.
Or le SELECT me retourne plusieurs résultats et je ne sais pas comment affecter un résultat à la bonne ligne.
La requête qui effectivement me retourne 150 lignes
SELECT parcelle_info.proprietaire
FROM cadastre.parcelle_info,ppc.infraction
WHERE geo_par=geo_parcelle
Et UPDATE que j'utilise
UPDATE ppc.infraction SET proprietaire = (SELECT parcelle_info.proprietaire
FROM cadastre_35_2022_22_2022.parcelle_info,ppc.infraction
WHERE geo_par=geo_parcelle)
De quelle manière je pourrais procéder ?
Cordialement,
Bonjour,
J'ai trouver le problème !!
NEW.geo_par := (SELECT geo_parcelle
FROM cadastre_35_2022_22_2022.geo_parcelle)
WHERE ST_Contains(geo_parcelle.geom,NEW.geom_point);
Dans le FROM j'avais ppc.infraction alors que c'est un trigger qui est sur cette même table.
Du coup, ca renvoyait plusieurs NEW.geo_point
Merci de votre aide
Bonne journée
En déplaçant les parenthèses j'ai une amélioration mais toujours un message d'erreur
Erreur du fournisseur de données :
Erreur PostGIS lors de l'ajout d'entité : ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression
Effectivement quand je test la requête, elle me revoie tout les geo_parcelle qui contient un point mais je pensais que en utilisant NEW.geom_point dans la fonction ca allait prendre que le point du nouvel enregistrement ?
Effectivement, j'avais tester de rajouter geo_parcelle pour éviter toute ambiguïté mais il y a toujours la même erreur.
J'ai testé avec un autre jeu de donnée: table geo_commune
champ nomcommune
Problème identique.
Jean
Bonjour,
J'ai mis en place un projet Qgis dans le quel les utilisateurs peuvent rajouter des points qui correspondent à des infractions (dépôts de déchet, épandage …) commises sur notre territoire.
Dans cette couche infraction il y a des informations sur la parcelle où est située l'infraction.
Et je souhaitais faire une fonction déclencheur qui permet de récupérer automatiquement l'identifiant unique de la parcelle (geo_parcelle) qui est dans ma couche geo_parcelle. C'est pas une faute la table est le champ geo_parcelle ont le même nom.
Schéma : cadastre_35_2022_22_2022 Schéma : ppc
Table : geo_parcelle Table : infraction
Colonne : geo_parcelle Colonne: geo_par
La fonction utilisée:
REATE FUNCTION ppc.info_parcelle()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
IF TG_OP = 'INSERT' THEN
NEW.geo_par := (SELECT geo_parcelle
FROM cadastre_35_2022_22_2022.geo_parcelle,ppc.infraction)
WHERE ST_Contains(geo_parcelle.geom,NEW.geom_point);
END IF;
RETURN NEW;
END;
$BODY$;
ALTER FUNCTION ppc.info_parcelle()
OWNER TO postgres;
Le trigger:
CREATE TRIGGER info_parcelle
BEFORE INSERT
ON ppc.infraction
FOR EACH ROW
EXECUTE FUNCTION ppc.info_parcelle();
Et du coup, j'ai un message d'erreur sur Qgis quand je souhaite enregistrer la nouvelle infraction.
J'ai testé la requête en dehors de la fonction et elle fonctionne, elle me renvoi bien geo_parcelle.
Message d'erreur sur Qgis:
Impossible de valider les changements pour la couche Infraction point
Erreurs : ERROR: 1 feature(s) not added.
Erreur du fournisseur de données :
Erreur PostGIS lors de l'ajout d'entité : ERREUR: entrée manquante de la clause FROM pour la table « geo_parcelle »
LINE 3: WHERE ST_Contains(geo_parcelle.geom,NEW.geom_poin...
^
QUERY: SELECT (SELECT geo_parcelle
FROM cadastre_35_2022_22_2022.geo_parcelle,ppc.infraction)
WHERE ST_Contains(geo_parcelle.geom,NEW.geom_point)
CONTEXT: fonction PL/pgSQL ppc.info_parcelle(), ligne 6 à affectation
Merci d'avance pour votre aide.
Bien cordialement,
Désolé du dérangement, ça fonctionne aussi de mon côté
Bonjour,
Je souhaite savoir si il est possible de donner des droits seulement à un champ d'une table?
Je m'explique, j'ai une table "parcelle" qui contient un champ "exploite" et je voudrait que le group "ppc" puisse voir toute la table et juste modifier le champ "exploite"
J'ai essayé cette requête :
GRANT SELECT, UPDATE (exploite) ON TABLE foncier.parcelle to ppc
La requête fonctionne mais UPDATE ne reste pas dans le sql de la table.
Merci d'avance pour votre aide.
Pages : 1