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 pourrais-je faire cela?

63
demandé sur wonea 2012-11-05 02:53:37

3 réponses

Utiliser le TRUNCATE TABLE commande.

77
répondu Greg Hewgill 2012-11-04 22:55:50

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

Suppression du contenu de la table à l'aide de sql:

Suppression du contenu d'un tableau:

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 tard dans cette réponse):

TRUNCATE table_a, table_b CASCADE;

Suppression du contenu de la table à l'aide de pgAdmin:

Suppression du contenu de un tableau:

Right click on the table -> Truncate

Suppression du contenu de la table et des tables qui y font référence:

Right click on the table -> Truncate Cascaded

Différence entre supprimer et tronquer:

De la documentation:

DELETE supprime les lignes qui satisfont à la clause WHERE de table. Si la clause WHERE est absente, l'effet est de supprimer toutes les lignes dans la table. http://www.postgresql.org/docs/9.3/static/sql-delete.html

TRUNCATE est une extension PostgreSQL cela fournit un mécanisme plus rapide pour supprimer toutes les lignes d'une table. TRUNCATE supprime rapidement toutes les lignes d'un ensemble de tables. Il a le même effet qu'une suppression non qualifiée sur chaque table, mais comme il ne scanne pas réellement les tables, c'est plus rapide. En outre, il récupère l'espace disque immédiatement, plutôt que d'exiger une opération de vide ultérieure. Ceci est très utile sur les grandes tables. http://www.postgresql.org/docs/9.1/static/sql-truncate.html

Travailler avec une table référencée à partir d'une autre table:

Lorsque vous avez une base de données qui a plus d'une table, les tables ont probablement une relation. A titre d'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 quelques données préparé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);

Table Commandes références table Clients et table loyalty_cards références table Clients. Lorsque vous essayez de tronquer / Supprimer de la table référencée par d'autres tables (l'autre table / s a une contrainte de clé étrangère à la table nommée) vous obtenez une erreur. Pour supprimer du 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 référencée avec le mot clé CASCADE (vous pouvez nommer plus d'une table)

TRUNCATE customers CASCADE;

Il en va de même pour pgAdmin. Faites un clic droit sur la table Clients et choisissez tronquer en cascade.

67
répondu vitfo 2014-08-07 13:31:03

Pour petites tables DELETE est souvent plus rapide et nécessite un verrouillage moins agressif (pour une charge simultanée lourde):

DELETE FROM tbl;

Sans condition WHERE.

Pour les tablesmoyennes ou plus grandes , allez avec TRUNCATE tbl, comme @ Greg posté.

23
répondu Erwin Brandstetter 2012-11-05 05:10:51