Respostas:
Use o TRUNCATE TABLE
comando.
O conteúdo da tabela / tabelas no banco de dados PostgreSQL pode ser excluído de várias maneiras.
Excluindo o conteúdo da tabela usando sql:
Excluindo o conteúdo de uma tabela:
TRUNCATE table_name;
DELETE FROM table_name;
Excluindo o conteúdo de todas as tabelas nomeadas:
TRUNCATE table_a, table_b, …, table_z;
Excluindo o conteúdo de tabelas nomeadas e tabelas que fazem referência a elas (explicarei com mais detalhes posteriormente nesta resposta):
TRUNCATE table_a, table_b CASCADE;
Excluindo o conteúdo da tabela usando pgAdmin:
Excluindo o conteúdo de uma tabela:
Right click on the table -> Truncate
Excluindo o conteúdo da tabela e as tabelas que fazem referência a ele:
Right click on the table -> Truncate Cascaded
Diferença entre excluir e truncar:
Da documentação:
DELETE exclui linhas que satisfazem a cláusula WHERE da tabela especificada. Se a cláusula WHERE estiver ausente, o efeito é excluir todas as linhas da tabela. http://www.postgresql.org/docs/9.3/static/sql-delete.html
TRUNCATE é uma extensão do PostgreSQL que fornece um mecanismo mais rápido para remover todas as linhas de uma tabela. TRUNCATE remove rapidamente todas as linhas de um conjunto de tabelas. Tem o mesmo efeito que um DELETE não qualificado em cada tabela, mas, como não verifica as tabelas, é mais rápido. Além disso, ele recupera espaço em disco imediatamente, em vez de exigir uma operação VACUUM subsequente. Isso é mais útil em grandes tabelas. http://www.postgresql.org/docs/9.1/static/sql-truncate.html
Trabalhando com a tabela que é referenciada em outra tabela:
Quando você tem um banco de dados que possui mais de uma tabela, as tabelas provavelmente têm relacionamento. Como exemplo, existem três tabelas:
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)
);
E alguns dados preparados para essas tabelas:
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);
Os pedidos da tabela fazem referência aos clientes da tabela e a tabela loyalty_cards faz referência aos clientes da tabela. Ao tentar TRUNCAR / EXCLUIR da tabela que é referenciada por outra (s) tabela (s) (a (s) outra (s) tabela (s) tem restrição de chave estrangeira para a tabela nomeada), você obtém um erro. Para excluir o conteúdo de todas as três tabelas, você deve nomear todas essas tabelas (a ordem não é importante)
TRUNCATE customers, loyalty_cards, orders;
ou apenas a tabela que é referenciada com a palavra-chave CASCADE (você pode nomear mais tabelas do que apenas uma)
TRUNCATE customers CASCADE;
O mesmo se aplica ao pgAdmin. Clique com o botão direito na tabela de clientes e escolha Truncar em cascata.
TRUNCATE
faz parte do ANSI SQL e é compatível com todos os DBMS. Segui o link e o documento não menciona nada sobre extensões. Talvez o link esteja incorreto ou desatualizado?
Para tabelas pequenasDELETE
é geralmente mais rápido e precisa de bloqueio menos agressivo (para carga simultânea pesada):
DELETE FROM tbl;
Sem WHERE
condição.
Para tabelas médias ou maioresTRUNCATE tbl
, use, como postou @Greg.