Olá, quero deletar todos os dados das minhas tabelas postgresql, mas não a própria tabela. Como posso fazer isso?
postgresql
vo1d
fonte
fonte
Respostas:
Use o
TRUNCATE TABLE
comando.fonte
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:
Excluindo o conteúdo de todas as tabelas nomeadas:
Excluindo o conteúdo de tabelas nomeadas e tabelas que fazem referência a elas (explicarei com mais detalhes posteriormente nesta resposta):
Excluindo o conteúdo da tabela usando pgAdmin:
Excluindo o conteúdo de uma tabela:
Excluindo o conteúdo da tabela e as tabelas que fazem referência a ele:
Diferença entre excluir e truncar:
Da documentação:
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:
E alguns dados preparados para essas tabelas:
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)
ou apenas a tabela que é referenciada com a palavra-chave CASCADE (você pode nomear mais tabelas do que apenas uma)
O mesmo se aplica ao pgAdmin. Clique com o botão direito na tabela de clientes e escolha Truncar em cascata.
fonte
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 pequenas
DELETE
é geralmente mais rápido e precisa de bloqueio menos agressivo (para carga simultânea pesada):Sem
WHERE
condição.Para tabelas médias ou maiores
TRUNCATE tbl
, use, como postou @Greg.fonte