Message posté par : Léandre Béron
----------------------------------------
Bonjour,
Si je comprends bien, vous voulez créer un trigger sur chacune des tables de votre base de
données (sauf tables systèmes) pour exécuter votre procédure fonction_suivi().
Vous pouvez utiliser la syntaxe suivante pour créer une fonction :
-----------------
Citation :
create or replace function create_trigger() returns integer as $$
declare
v_count integer;
v_table record;
begin
v_count := 0;
FOR v_table IN
SELECT n.nspname AS schemaname,
c.relname AS tablename
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
WHERE c.relkind IN ('r') AND n.nspname NOT IN ('pg_catalog',
'information_schema')
LOOP
EXECUTE 'CREATE TRIGGER
trigger_suivi_'||quote_ident(v_table.tablename)||' AFTER INSERT OR UPDATE OR
DELETE ON '||quote_ident(v_table.tablename)||' FOR EACH ROW EXECUTE PROCEDURE
public.fonction_suivi()';
v_count := v_count + 1;
END LOOP;
RETURN v_count;
end
$$ language 'plpgsql';
-----------------
là, nous prenons toutes les tables via la conditionn c.relkind IN ('r') avec r qui
correspond aux tables présentes dans votre base de données.
Nous avons exclus les tables du schéma pg_catalog et information_schema. Si vous voulez
exclure d'autres schémas, il faut adapter le bout de code.
L'instruction LOOP va boucler votre requête de création de trigger pour chaque table
qui ressort dans la sélection préalable.
Ensuite, il n'y a plus qu'à appeler cette fonction pour l’exécuter :
-----------------
Citation :
select create_trigger();
-----------------
Je n'ai pas testé le code, mais la syntaxe semble être bonne.
Cordialement,
Léandre BERON
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=358694#p358694
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net