PostgreSQLLa base de données la plus sophistiquée au monde.

TRUNCATE

TRUNCATE — vide une table ou un ensemble de tables

Synopsis

TRUNCATE [ TABLE ] nom [, ...] [ CASCADE | RESTRICT ]

Description

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.

Paramètres

name

Le nom d'une table à vider (peut être qualifié par le schéma).

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.

RESTRICT

Refuse le vidage si une des tables a des références de clés étrangères sur une table qui ne doit pas être vidée. Cette option est active par défaut.

Notes

Seul le propriétaire d'une table peut la vider (TRUNCATE).

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 n'exécutera aucun trigger ON DELETE qui pourrait exister sur les tables.

[Avertissement]

Avertissement

TRUNCATE n'est pas compatible avec MVCC (voir Chapitre 13, Contrôle d'accès simultané pour des informations générales sur MVCC). Après un vidage, la table apparaîtra vide pour toutes les transactions en cours même si elles utilisent une image prise avant le début du vidage. Ceci est un problème pour une transaction qui n'a pas eu un accès à la table avant le vidage -- toute transaction qui y a accédé avant détient au moins un verrou ACCESS SHARE qui bloquera TRUNCATE jusqu'à la fin de la transaction. Donc le vidage ne causera aucune incohérence apparente dans le contenu de la table pour des requêtes successives sur la même table, mais il causera une incohérence visble entre la table tronquée et les autres tables de la base.

Néanmoins, TRUNCATE est compatible avec le système des transactions : un tronquage pourrait être annulée si la transaction en cours n'est pas validée.

Exemples

Vider les tables grossetable et grandetable :

TRUNCATE grossetable, grandetable;

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;

Compatibilité

Il n'existe pas de commande TRUNCATE dans le standard SQL.