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 13/07/2016 10:37:27

f.ravel
Membre

Trigger pour concaténer des tables

Bonjour,

Je suis novice en matière de trigger, mais en m'appuyant sur un exemple j'ai essayé d'en mettre un en place pour concaténer des tables. Voici ce que je cherche à faire sur des tables identiques en matière de colonnes :

table1 - 500 lignes
table2 - 250 lignes
etc...

Je souhaite utiliser un trigger pour me retrouver avec :

table_concaténée - 750 lignes

Voici les différentes procédures que j'ai appliqué, pas d'erreur retournée, mais rien non plus dans la table d'agrégation :

--Création d'une fonction d'agrégation pour les tables multi_nb_gpdl
-- DROP FUNCTION public3.agreg_tables_multi_nb_gpdl();

CREATE OR REPLACE FUNCTION public3.agreg_tables_multi_nb_gpdl()
  RETURNS trigger AS
$BODY$
BEGIN
     IF (NEW.territoire='d06') THEN INSERT INTO public3.env_diff_09_14_d06_multi_nb_gpdl VALUES(NEW.*); RETURN NULL;
ELSIF (NEW.territoire='d13_177') THEN INSERT INTO public3.env_diff_09_14_d13_177_multi_nb_gpdl VALUES(NEW.*); RETURN NULL;
ELSE RAISE EXCEPTION 'Erreur code dpt'; END IF;
    
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public3.agreg_tables_multi_nb_gpdl()
  OWNER TO postgres;

--Création d'une table d'agrégation des tables "multi_nb_gpdl"
DROP TABLE IF EXISTS public3.env_diff_09_14_fr_multi_nb_gpdl
;

CREATE TABLE public3.env_diff_09_14_fr_multi_nb_gpdl
(
  id integer,
  surf integer,
  geom geometry,
  nlochab integer,
  nlogh integer,
  territoire character(50)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public3.env_diff_09_14_fr_multi_nb_gpdl
  OWNER TO postgres
;

CREATE TRIGGER env_diff_09_14_fr_multi_nb_gpdl_trigger
  BEFORE INSERT
  ON public3.env_diff_09_14_fr_multi_nb_gpdl
  FOR EACH ROW
  EXECUTE PROCEDURE public3.agreg_tables_multi_nb_gpdl();

Quelqu'un pourrait-il me dire ce que je ne fais pas correctement ?

Merci d'avance pour votre aide,

Fabrice.

Hors ligne

#2 13/07/2016 12:56:28

rjuju
Administrateur

Re : Trigger pour concaténer des tables

Vu le nombre de lignes concernées, faire une vue ne serait pas plus simple ?

Hors ligne

#3 13/07/2016 17:03:49

f.ravel
Membre

Re : Trigger pour concaténer des tables

Merci pour le retour.

En effet ce peut être une très bonne solution.

Par contre, et de prime abord, je ne sais pas concaténer des tables via une requête, et donc une vue ?

Hors ligne

#4 13/07/2016 17:07:14

rjuju
Administrateur

Re : Trigger pour concaténer des tables

Tout simplement :

SELECT champ1, champ2... FROM table1 WHERE...
UNION ALL
SELECT champ1, champ2... FROM table2 WHERE...
...

Bien évidemment, les champs doivent être identique dans chaque requête.

Hors ligne

#5 13/07/2016 17:56:24

f.ravel
Membre

Re : Trigger pour concaténer des tables

Super, merci beaucoup !!!

Hors ligne

Pied de page des forums