Solución:
Utilizar el TRUNCATE TABLE
mando.
El contenido de la tabla / tablas en la base de datos PostgreSQL se puede eliminar de varias formas.
Eliminando el contenido de la tabla usando sql:
Eliminar contenido de una tabla:
TRUNCATE table_name;
DELETE FROM table_name;
Eliminando el contenido de todas las tablas nombradas:
TRUNCATE table_a, table_b, …, table_z;
Eliminación de contenido de tablas con nombre y tablas que hacen referencia a ellas (lo explicaré con más detalles más adelante en esta respuesta):
TRUNCATE table_a, table_b CASCADE;
Eliminando el contenido de la tabla usando pgAdmin:
Eliminar contenido de una tabla:
Right click on the table -> Truncate
Eliminando el contenido de la tabla y las tablas que hacen referencia a ella:
Right click on the table -> Truncate Cascaded
Diferencia entre eliminar y truncar:
De la documentación:
DELETE elimina las filas que satisfacen la cláusula WHERE de la tabla especificada. Si la cláusula WHERE está ausente, el efecto es eliminar todas las filas de la tabla. http://www.postgresql.org/docs/9.3/static/sql-delete.html
TRUNCATE es una extensión de PostgreSQL que proporciona un mecanismo más rápido para eliminar todas las filas de una tabla. TRUNCATE elimina rápidamente todas las filas de un conjunto de tablas. Tiene el mismo efecto que un DELETE no calificado en cada tabla, pero como en realidad no escanea las tablas, es más rápido. Además, recupera espacio en disco inmediatamente, en lugar de requerir una operación de VACÍO posterior. Esto es más útil en tablas grandes. http://www.postgresql.org/docs/9.1/static/sql-truncate.html
Trabajar con una tabla a la que se hace referencia desde otra tabla:
Cuando tiene una base de datos que tiene más de una tabla, las tablas probablemente tengan relación. Como ejemplo, hay tres tablas:
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)
);
Y algunos datos preparados para estas tablas:
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);
Los pedidos de la tabla hacen referencia a los clientes de la tabla y la tabla loyalty_cards hace referencia a los clientes de la tabla. Cuando intenta TRUNCAR / ELIMINAR DE la tabla a la que hacen referencia otras tablas (las otras tablas tienen una restricción de clave externa a la tabla nombrada), obtiene un error. Para eliminar el contenido de las tres tablas, debe nombrar todas estas tablas (el orden no es importante)
TRUNCATE customers, loyalty_cards, orders;
o solo la tabla a la que se hace referencia con la palabra clave CASCADE (puede nombrar más tablas que solo una)
TRUNCATE customers CASCADE;
Lo mismo se aplica a pgAdmin. Haga clic con el botón derecho en la tabla de clientes y elija Truncar en cascada.
Para pequeña mesas DELETE
suele ser más rápido y necesita un bloqueo menos agresivo (para cargas concurrentes pesadas):
DELETE FROM tbl;
Sin WHERE
condición.
Para mediano o más grande mesas, ir con TRUNCATE tbl
, como @Greg publicó.