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 Re : PL/pgSQL » Recuperation nom d'une table à partir de TG_TABLE_NAME » 30/11/2017 00:35:12

Je voudrais récupérez le nom de schéma et nom de la table sur laquelle la modification est survenue



C'est à dire que à partir de --->  TG_TABLE_SCHEMA||'.'||TG_TABLE_NAME  je voulais avoir ce nom.

Cette fonction sera appelée lors de chaque modification des tables pour créer une table historique.

1- Mon objectif c'est de créer un enregistrement pour chaque modification pour n'importe quelle table

2- Comme j'ai 50 tables (qui ont des attributs spatials), j'ai créé 3 tables historiques pour chaque type de géométrie (ponctuel, zonal et linéaire)

3- A chaque modification ou suppression je déclenche ce fonction et maintenant pour que l'insertion dans la table historique passe, je veux le nom de la table sur laquelle la modification est survenue.

4- Jusqu'à présent ,je n'ai rien inséré dans ma table historique, et il semblait que la récupération du nom de table ne marche pas.

Je vous remercie .

#2 Re : PL/pgSQL » Recuperation nom d'une table à partir de TG_TABLE_NAME » 29/11/2017 23:31:57

Ok vous avez raison, mais au fait j'aimerais seulement récuperer le nom d'une table juste après sa modification:

CREATE OR REPLACE FUNCTION schema1.generer_historique_ponctuel()
  RETURNS trigger AS
$BODY$

DECLARE

    rec RECORD;
    oldValue TEXT;
    newValue TEXT;
BEGIN   

IF (TG_OP = 'UPDATE') THEN
   
        FOR rec IN
            SELECT column_name, data_type
            FROM information_schema.columns
            WHERE
                information_schema.columns.table_schema = TG_TABLE_SCHEMA
            AND information_schema.columns.table_name = TG_TABLE_NAME
         
        LOOP
   
             EXECUTE 'SELECT ($1).' || rec.column_name || '::text' INTO newValue USING NEW;
             EXECUTE 'SELECT ($1).' || rec.column_name || '::text' INTO oldValue USING OLD;
                           
            IF oldValue <> newValue THEN
                    INSERT INTO historique.historique_points ("id_objet", "date_modif","user_modif","attr_modif", "anc_val","geom", "operation_")
                    SELECT t."gid", now(), "current_user"(),  rec.column_name, oldValue,"geom",TG_OP FROM TG_TABLE_SCHEMA||'.'||TG_TABLE_NAME AS t WHERE NEW."gid" = t."gid";               
                END IF;
        END LOOP; 
        RETURN NEW;
     
END IF;

END;

$BODY$
  LANGUAGE plpgsql VOLATILE

Je vous remercie.

#3 PL/pgSQL » Recuperation nom d'une table à partir de TG_TABLE_NAME » 29/11/2017 13:28:54

Baovola
Réponses : 7

Bonjour,

J'aimerais récupérer dynamiquement le nom d'une table sur laquelle une modification est survenue (sur trigger bien sur) pour faire une historique.

J'ai utilisé le TG_TABLE_NAME mais ca ne marche pas, j'utilise la version 9.5.

Je vous remercie.

Pied de page des forums

Propulsé par FluxBB