[Postgresql] Truncate cascade??

Truncate cascade?? [Postgresql] - SQL/NoSQL - Programmation

Marsh Posté le 04-10-2007 à 10:18:07    

Bonjour,
 
Juste un détail qui me semble étonnant. J'étais persudé il y'a quelque temps que : truncate 'nomtable' cascade  ,marchait sous postgresql.
Me serais je totalement trompé??  :??:  
 
Merci de vos réponses

Reply

Marsh Posté le 04-10-2007 à 10:18:07   

Reply

Marsh Posté le 04-10-2007 à 10:24:18    

Reply

Marsh Posté le 04-10-2007 à 10:32:34    

Etrange ce mot-clé "cascade" sur truncate... habituellement, truncate ça sert justement à shooter les données d'une table sans se soucier de l'intégrité...


Message édité par MagicBuzz le 04-10-2007 à 10:32:47
Reply

Marsh Posté le 04-10-2007 à 10:34:14    

Ca veut rien dire ce que tu dis: on parle de SGBD-R, ça n'est pas possible de violer les contraintes.

Reply

Marsh Posté le 04-10-2007 à 10:37:11    


Description  
TRUNCATE supprime rapidement toutes les lignes d'une table. Elle a le même effet qu'un DELETE non qualifié mais elle ne parcourt pas la table ce qui est plus rapide. C'est le plus utile sur les grosses tables.


 
"S'il ne parcours pas les lignes", je vois mal comment il va vérifier l'intégrité...
 
D'autant que l'intégrité ne s'arrête pas aux contraintes FK... Les triggers entre autre ne sont pas levés, alors faut pas espérer avoir des données dans un état stable à la fin du traîtement.


Message édité par MagicBuzz le 04-10-2007 à 10:38:41
Reply

Marsh Posté le 04-10-2007 à 10:41:01    

Et pour info :


Compatibility  
SQL92  
There is no TRUNCATE statement in SQL92.  


 
A partir de là, ça peut très bien faire de la tarte à la fraise, il n'est plus question de parler de "SGBD-R" en règle générale. Chaque éditeur est libre de faire la tambouille qu'il veut de son côté.
 
Voici d'ailleurs une des conditions d'utilisation de TRUNCATE sur "ASASQL" :


Il n'existe pas de clés étrangères dirigées vers la table ou en provenant.


=> Si tu dois dropper tes contraintes avant... C'est sûr que c'est plus simple...


Message édité par MagicBuzz le 04-10-2007 à 10:45:32
Reply

Marsh Posté le 04-10-2007 à 10:42:05    

Et enfin :


TRUNCATE ne peut pas être exécutée dans un bloc de transaction (BEGIN/COMMIT), car il n'y a pas moyen de faire une annulation.  


 
Si c'est pas transactionnel, alors on sort du scope du SGBD-R. A partir de là on n'a pas à espérer qu'il respecte les contraintes.

Reply

Marsh Posté le 04-10-2007 à 10:52:09    

En jettant un oeil sur la doc d'Oracle 10g, je vois qu'on peut truncater une table sans tenir compte des FK. Il faut cependant les désactiver avant.
http://download.oracle.com/docs/cd [...] _10006.htm
 
Par contre, dans des versions plus anciennes (7 et 8 au moins) cette désactivation n'était pas nécessaire.

Reply

Marsh Posté le 04-10-2007 à 11:14:37    

OK, j'avais déja regardé la doc postgresql et cela ne fonctionnait pas...mais je suis tout à fait d'accord avec vous.
 
En fait, je crois tout simplement que j'avais du faire mon cascade pour un exemple très simple ou ces tables en cascade n'interféraient que très peu avec l'ensemble du système.
Je vais regarder si je peux désactiver mes fk.
Merci pour votre aide  :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed