Bonjour,

Je souhaiterais que lors du premier INSERT ou UPDATE de ma table 'test_trigger', le contenu de celle-ci soit effacé.

Je m'explique sur l'illogisme de ce trigger. J'utilise geoconcept (un logiciel de cartographie) qui exporte des données vers une base postgresql/postgis de sorte que ces données exportés puisse être utiliser dans une autre application.
Cependant Geoconcept agit avec postgresl que par insert ou update.

Ce qui me pose le problème suivant :lorsque je supprime une donnée de geoconcept, celle n'est pas supprimé dans la base postgresl (puisqu'il n'y a que des insertion et des mises à jour mais il ne supprime rien de la base).

Afin de pallier à ce problème, je souhaitais vider ma table avant le premier INSERT ou UPDATE pour que Geoconcept n'ait qu'à insérer l'ensemble des données.

Pour cela j'ai crée le trigger suivant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
CREATE FUNCTION vider_table() RETURNS TRIGGER AS $suppression$
BEGIN 
   TRUNCATE TABLE test_trigger;
END;
$suppression$ language plpgsql;
 
CREATE TRIGGER suppression 
BEFORE INSERT or UPDATE or DELETE
	ON test_trigger 
	FOR EACH STATEMENT 
	EXECUTE PROCEDURE vider_table();
mais il me renvoie l'erreur suivante aprés un 'insert into' (testé en requête SQL directement, sans utiliser geoconcept)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
ERROR:  cannot TRUNCATE "test_trigger" because it is being used by active queries in this session
CONTEXT:  SQL statement "TRUNCATE TABLE test_trigger"
PL/pgSQL function "vider_table" line 2 at SQL statement
Que pensez-vous de ma logique? Voyez-vous une autre solution qu'un trigger, ou celui est-il à paramétrer différemment?

Par avance merci,