

TRUNCATE — vide une table ou un ensemble de tables
TRUNCATE [ TABLE ] [ ONLY ] nom [ * ] [, ... ]
    [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
  
   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.
  
nom
      Le nom d'une table à vider (pouvant être qualifié par le schéma). Si la
      clause ONLY est précisée avant le nom de la table,
      seule cette table est tronquée. Dans le cas contraire, la table et toutes
      ses tables filles (si elle en a) sont tronquées. En option,
      * peut être ajouté après le nom de la table pour
      indiquer explicitement que les tables filles sont inclues.
     
RESTART IDENTITYRedémarre les séquences intégrées aux colonnes des tables tronquées.
CONTINUE IDENTITYNe change pas la valeur des séquences. C'est la valeur par défaut.
CASCADE
      Vide toutes les tables qui ont des références de clés étrangères sur une
      des tables nommées et sur toute table ajoutée au groupe à cause du
      CASCADE.
     
RESTRICTRefuse le vidage si une des tables a des références de clés étrangères sur une table qui ne sont pas listées dans la commande. Cette option est active par défaut.
   Vous devez avoir le droit TRUNCATE sur la table que vous
   voulez tronquer.
  
   TRUNCATE nécessite un verrou d'accès exclusif
   (ACCESS EXCLUSIVE) sur chaque table qu'il traite, ce qui
   bloque toutes les autres opérations en parallèle sur cette table. Quand
   RESTART IDENTITY est spécifié, toutes les séquences qui
   doivent être réinitialisées ont un verrou exclusif. Si un
   accès concurrent est nécessaire, alors la commande
   DELETE doit être utilisée.
  
   TRUNCATE ne peut pas être utilisé sur une table
   référencée par d'autres tables au travers de clés étrangères, sauf si ces
   tables sont aussi comprises dans la commande. Dans le cas contraire, la
   vérification nécessiterait des parcours complets de tables, ce qui n'est pas
   le but de la commande TRUNCATE. L'option
   CASCADE est utilisable pour inclure automatiquement
   toutes les tables dépendantes  --  faites attention lorsque vous utilisez
   cette option parce que vous pourriez perdre des données que vous auriez
   souhaitez conserver !
  
   TRUNCATE ne déclenchera aucun trigger ON
    DELETE qui pourrait exister sur les tables. Par contre, il
   déclenchera les triggers ON TRUNCATE. Si des triggers
   ON TRUNCATE sont définis sur certaines des tables,
   alors tous les triggers BEFORE TRUNCATE sont déclenchés
   avant que le tronquage n'intervienne, et tous les triggers AFTER
    TRUNCATE sont déclenchés après la réalisation du dernier
   tronquage et toutes les séquences sont réinitialisées. Les triggers se
   déclencheront dans l'ordre de traitement des
   tables (tout d'abord celles listées dans la commande, puis celles ajoutées
   à cause des cascades).
  
   TRUNCATE n'est pas sûre au niveau MVCC. Après la
   troncature, la table apparaîtra vide aux transactions concurrentes si elles
   utilisent une image prise avant la troncature. Voir Section 13.5 pour plus de détails.
  
   TRUNCATE est compatible avec le système des transactions.
   Les données seront toujours disponibles si la transaction est annulée.
  
   Quand RESTART IDENTITY est spécifié, les opérations
   ALTER SEQUENCE RESTART impliquées sont aussi réalisées
   de façon transactionnelles. Autrement dit, elles seront annulées si la
   transaction n'est pas validée. Faites attention au fait que si
   des opérations supplémentaires sur les séquences impliquées est faite avant
   l'annulation de la transaction, les effets de ces opérations sur les
   séquences seront aussi annulés mais pas les effets sur
   currval() ; autrement dit, après la transaction,
   currval() continuera à refléter la dernière valeur de
   la séquence obtenue au sein de la transaction échouée, même si la séquence
   elle-même pourrait ne plus être en adéquation avec cela. C'est similaire
   au comportement habituel de currval() après une
   transaction échouée.
  
   TRUNCATE n'est actuellement pas supporté pour les tables
   externes. Autrement dit, si cette commande est exécutée sur une table qui a
   des tables filles externes, cette commande échouera.
  
   Vider les tables grossetable et
   grandetable :
   
TRUNCATE grossetable, grandetable;
La même chose, en réinitialisant les générateurs des séquences associées :
TRUNCATE bigtable, fattable RESTART IDENTITY;
   Vide la table uneautretable, et cascade cela à toutes
   les tables qui référencent uneautretable via des
   contraintes de clés étrangères :
   
TRUNCATE uneautretable CASCADE;
   Le standard SQL:2008 inclut une commande TRUNCATE avec la
   syntaxe TRUNCATE TABLE .
   Les clauses nom_tableCONTINUE IDENTITY/RESTART IDENTITY
   font aussi partie du standard mais ont une signification légèrement différente,
   quoique en rapport. Certains des comportements de concurrence de cette commande
   sont laissés au choix de l'implémentation par le standard, donc les notes
   ci-dessus doivent être comprises et comparées avec les autres implémentations
   si nécessaire.