182 votes

PostgreSQL supprimer tout le contenu

Bonjour, je veux supprimer toutes les données de mes tables postgresql, mais pas la table elle-même. Comment puis-je faire cela ?

204voto

Greg Hewgill Points 356191

Utilisez le TRUNCATE TABLE commandement.

166voto

vitfo Points 5290

Le contenu de la ou des tables de la base de données PostgreSQL peut être supprimé de plusieurs façons.

Suppression du contenu d'une table à l'aide de sql :

Suppression du contenu d'une table :

TRUNCATE table_name;
DELETE FROM table_name;

Suppression du contenu de toutes les tables nommées :

TRUNCATE table_a, table_b, …, table_z;

Suppression du contenu des tables nommées et des tables qui y font référence (je l'expliquerai plus en détail plus loin dans cette réponse) :

TRUNCATE table_a, table_b CASCADE;

Suppression du contenu d'une table à l'aide de pgAdmin :

Suppression du contenu d'une table :

Right click on the table -> Truncate

Suppression du contenu du tableau et des tableaux qui y font référence :

Right click on the table -> Truncate Cascaded

Différence entre supprimer et tronquer :

Dans la documentation :

DELETE supprime les lignes qui satisfont à la clause WHERE de la base de données spécifiée. spécifiée. Si la clause WHERE est absente, l'effet est de supprimer tous les enregistrements dans la table. http://www.postgresql.org/docs/9.3/static/sql-delete.html

TRUNCATE est une extension PostgreSQL qui fournit un mécanisme plus rapide pour supprimer toutes les lignes d'une table. TRUNCATE supprime rapidement tous les enregistrements d'une table. ensemble de tables. Il a le même effet qu'un DELETE non qualifié sur chaque table. table, mais comme elle ne scanne pas les tables, elle est plus rapide. De plus, il récupère immédiatement de l'espace disque, plutôt que de nécessiter une opération VACUUM ultérieure. Cette méthode est particulièrement utile pour les grandes tables. http://www.postgresql.org/docs/9.1/static/sql-truncate.html

Travailler avec une table qui est référencée par une autre table :

Lorsque vous avez une base de données qui contient plus d'une table, les tables ont probablement une relation. Par exemple, il y a trois tables :

create table customers (
customer_id int not null,
name varchar(20),
surname varchar(30),
constraint pk_customer primary key (customer_id)
);

create table orders (
order_id int not null,
number int not null,
customer_id int not null,
constraint pk_order primary key (order_id),
constraint fk_customer foreign key (customer_id) references customers(customer_id)
);

create table loyalty_cards (
card_id int not null,
card_number varchar(10) not null,
customer_id int not null,
constraint pk_card primary key (card_id),
constraint fk_customer foreign key (customer_id) references customers(customer_id)
);

Et certains ont préparé des données pour ces tableaux :

insert into customers values (1, 'John', 'Smith');

insert into orders values 
(10, 1000, 1),
(11, 1009, 1),
(12, 1010, 1);        

insert into loyalty_cards values (100, 'A123456789', 1);

La table orders fait référence à la table customers et la table loyalty_cards fait référence à la table customers. Lorsque vous essayez de faire un TRUNCATE / DELETE FROM de la table qui est référencée par une ou plusieurs autres tables (l'autre ou les autres tables ont une contrainte de clé étrangère vers la table nommée), vous obtenez une erreur. Pour supprimer le contenu des trois tables, vous devez nommer toutes ces tables (l'ordre n'est pas important)

TRUNCATE customers, loyalty_cards, orders;

ou juste la table qui est référencée avec le mot clé CASCADE (vous pouvez nommer plus de tables qu'une seule)

TRUNCATE customers CASCADE;

Il en va de même pour pgAdmin. Faites un clic droit sur la table des clients et choisissez Truncate Cascaded.

47voto

Erwin Brandstetter Points 110228

Pour petit tableaux DELETE est souvent plus rapide et nécessite un verrouillage moins agressif (pour une charge concurrente importante) :

DELETE FROM tbl;

Sans WHERE condition.

Pour moyenne ou grande les tables, allez-y avec TRUNCATE tbl comme l'a fait @Greg.

5voto

S.Voulgaris Points 74

J'ai trouvé un moyen très simple et rapide pour tous ceux qui pourraient utiliser un outil tel que DBeaver : Il suffit de sélectionner toutes les tables que vous voulez tronquer ( SHIFT + click o CTRL + click ) alors right click

enter image description here

Et si vous avez des clés étrangères, sélectionnez aussi CASCADE option sur Settings panneau. Start et c'est tout ce qu'il faut !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X