TRUNCATE |
Tronque |
PostgreSQL |
Syntaxe
TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
|
Paramètres
Nom |
Description |
name |
Ce paramètre permet d'indiquer le nom (éventuellement qualifié par le schéma) d'une table à tronquer. Si ONLY est spécifié avant le nom de la table, seule cette table est tronquée. Si ONLY n'est pas spécifié, la table et toutes ses tables descendantes (le cas échéant) sont tronquées. Facultativement, * peut être spécifié après le nom de la table pour indiquer explicitement que les tables descendantes sont incluses. |
RESTART IDENTITY |
Ce paramètre permet de redémarrer automatiquement les séquences appartenant aux colonnes de la ou des tables tronquées. |
CONTINUE IDENTITY |
Ce paramètre permet de ne pas modifier les valeurs des séquences. C'est la valeur par défaut. |
CASCADE |
Ce paramètre permet de tronquer automatiquement toutes les tables ayant des références de clef étrangère à l'une des tables nommées ou à toutes les tables ajoutées au groupe en raison de CASCADE. |
RESTRICT |
Ce paramètre permet de refuser de tronquer si l'une des tables a des références de clef étrangère provenant de tables n'étant pas répertoriées dans la commande. C'est la valeur par défaut. |
Description
Cette instruction permet de vider une table ou un ensemble de tables.
Remarques
- Vous devez disposer du privilège TRUNCATE sur une table pour la tronquer.
- L'instruction TRUNCATE acquiert un verrou ACCESS EXCLUSIVE sur chaque table sur laquelle il opère, ce qui bloque toutes les autres opérations concurrentes
sur la table. Lorsque RESTART IDENTITY est spécifié, toutes les séquences qui doivent être redémarrées sont également verrouillées exclusivement. Si un accès simultané
à une table est requis, la commande DELETE doit être utilisée à la place.
- L'instruction TRUNCATE ne peut pas être utilisé sur une table ayant des références de clef étrangère provenant d'autres tables, à moins que toutes ces tables ne soient
également tronquées dans la même commande. La vérification de la validité dans de tels cas nécessiterait des analyses de table, et l'essentiel n'est pas d'en faire une. L'option
CASCADE peut être utilisée pour inclure automatiquement toutes les tables dépendantes - mais soyez très prudent lorsque vous utilisez cette option, sinon vous risquez de
perdre des données que vous n'aviez pas l'intention de faire !
- L'instruction TRUNCATE ne déclenchera aucun déclencheur ON DELETE pouvant exister pour les tables. Mais il déclenchera les déclencheurs ON TRUNCATE. Si
des déclencheurs ON TRUNCATE sont définis pour l'une des tables, alors tous les déclencheurs BEFORE TRUNCATE sont déclenchés avant qu'une troncature ne se produise,
et tous les déclencheurs AFTER TRUNCATE sont déclenchés après la dernière troncature et toutes les séquences sont réinitialisées. Les déclencheurs se déclencheront dans
l'ordre dans lequel les tables doivent être traitées (d'abord celles répertoriées dans la commande, puis celles qui ont été ajoutées en raison de la cascade).
- L'instruction TRUNCATE n'est pas compatible MVCC. Après la troncature, la table apparaîtra vide pour les transactions simultanées, si elles utilisent un
instantané pris avant la troncature.
- L'instruction TRUNCATE est sûr pour les transactions en ce qui concerne les données dans les tables : la troncature sera annulée en toute sécurité si la transaction
environnante n'est pas validée.
- Lorsque RESTART IDENTITY est spécifié, les opérations ALTER SEQUENCE RESTART implicites sont également effectuées de manière transactionnelle ; c'est-à-dire
qu'ils seront annulés si la transaction environnante n'est pas validée. Sachez que si des opérations de séquence supplémentaires sont effectuées sur les séquences redémarrées
avant que la transaction ne soit annulée, les effets de ces opérations sur les séquences seront annulés, mais pas leurs effets sur currval(); c'est-à-dire qu'après la
transaction, currval() continuera à refléter la dernière valeur de séquence obtenue dans la transaction ayant échoué, même si la séquence elle-même peut ne plus être
cohérente avec cela. Ceci est similaire au comportement habituel de currval() après un échec de transaction.
- L'instruction TRUNCATE n'est actuellement pas pris en charge pour les tables étrangères. Cela implique que si une table spécifiée a des tables descendantes étrangères,
la commande échouera.
Dernière mise à jour : Jeudi, le 14 Octobre 2021