|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() ben gr Inscription : octobre 2010 Messages : 49 ![]() |
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 :
Code :
Par avance merci, |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
TRUNCATE supprime la table.
Si tu veux vider la table, il faut utiliser DELETE : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() ben gr Inscription : octobre 2010 Messages : 49 ![]() |
Je pensais que TRUNCATE pouvait faire l'affaire, en effet la documentation postgresql indique
Code :
La commande TRUNCATE supprime rapidement toutes les lignes d'un ensemble de tables. Elle a le même effet qu'un DELETE non qualifié sur chaque TABLE, mais comme elle ne parcourt par la TABLE, elle est plus rapide. De plus, elle récupère immédiatement l'espace disque, évitant ainsi une opération VACUUM. Cette commande est particulièrement utile pour les tables volumineuses. Code :
|
||
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
Quant à l'erreur que tu as obtenue, je ne sais quoi te dire...
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
Votre message d'erreur est logique. Vous faites un trigger "ON DELETE" dans lequel vous faites un DELETE de la table en question. Vous amorcez une récursivité sans fin.
Et à la base l'approche est mauvaise car l'élément déclencheur de votre vidage de table ne peut être l'ajout de ligne (INSERT). En effet, il est très probable que l'ajout se fasse en plusieurs ordres INSERT. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com