Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 12/06/2014 11:22:54
- Sadewizz
- Membre
Trigger sur une vue
Bonjour,
Est il possible d'implémenter une table en effectuant une requête via un trigger, sur des données issues d'une vue ?
J'ai pour l'instant cette fonction
CREATE OR REPLACE FUNCTION za()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
INSERT INTO za SELECT row_number() OVER (ORDER BY france_littoral.id) AS gid,
new.table_liste_emprise.nom_donnee,
france_littoral.id AS zone,
france_littoral.the_geom_wgs84
FROM france.france_littoral,
france.table_liste_emprise
WHERE st_intersects(france_littoral.the_geom_wgs84, table_liste_emprise.the_geom_wgs84);
RETURN NEW;
return null;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION za()
OWNER TO postgres;
------------------------------------------------------------------------
CREATE TRIGGER zone_geo
INSTEAD OF INSERT ON zone_geographique
FOR EACH ROW
EXECUTE PROCEDURE za();
Ici, j'essaie de réaliser la requête en fonction des nouveaux ajouts dans la vue "table_liste_emprise", et d'implémenter le résultat dans la table "za".
Cependant le trigger ne marche pas alors que le code s’exécute bien.
D'ou ma question : Est ce possible de réaliser ce genre d'opération ?
Merci d'avance.
Sadewizz
Dernière modification par Sadewizz (12/06/2014 11:35:58)
Hors ligne
#2 12/06/2014 16:25:23
- Geo-x
- Membre
Re : Trigger sur une vue
Bonjour Sadewizz.
Il y a tout d'abord un ensemble de traitement à faire au niveau de votre fonction. Actuellement vous ne lancez aucune fonction lors de l'insertion dans la vue "table_liste_emprise" mais dans la table zone_geographique
INSTEAD OF INSERT ON zone_geographique
Ensuite il y a dans votre code tout un tas de mélange, exemple, un trigger return soit NEW soit NULL mais pas les deux :
RETURN NEW;
return null;
L'INSERT INTO ne s'écrit pas exactement comme vous avez pu le syntaxé : http://postgresql.developpez.com/docume … nsert.html
Pour ce qui est de l'activation d'un trigger à l'insertion dans une vue ça ne me semble pas possible. Je vous conseil de créer une règle à l'insertion sur votre vue qui lancera une fonction qui elle va insérer les valeurs voulues dans votre table.
Geo-x
Hors ligne
#3 17/06/2014 09:06:25
- Sadewizz
- Membre
Re : Trigger sur une vue
Bonjour Geo-x,
Merci pour votre réponse.
Effectivement le trigger n'agit pas sur la bonne fonction. J'ai vraisemblablement fais une erreur lors de mon copier coller.
Mon but était d'avoir une souche d'intersection dynamique. De ce fait une vue me semblait répondre au problème, cependant j'ai pu observer une certaine lenteur lors de l'import de cette vue dans mon client carto. Alors qu'il n'y a que 74 lignes. La même couche mais cette fois ci en table, s'importe sans problème.
Avez vous une idée sur le pourquoi de cette lenteur?
Sadewizz
Hors ligne
#4 17/06/2014 11:24:57
- gleu
- Administrateur
Re : Trigger sur une vue
Les données n'ont besoin que d'êtres lues dans une table. Elles doivent être "calculées" dans une vue.
Guillaume.
Hors ligne
Pages : 1