PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#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

Pied de page des forums