TRUNCATE TABLE
Para remover todos os dados de uma tabela, você usa DELETE.
No entanto, para uma grande tabela, é mais eficiente usar TRUNCATE TABLE.
A declaração TRUNCATE TABLE remove todas as linhas de uma tabela sem uma varredura da tabela. Esta é a razão pela qual é mais rápido do que a instrução DELETE.
Além disso, ele recupera o armazenamento imediatamente: assim, você não tem que executar uma operação vacumm em seguida, o que é útil em caso de grandes tabelas.
Remover todos os dados de uma tabela
A forma mais simples da instrução TRUNCATE TABLE é a seguinte:
TRUNCATE TABLE table_name;
Ex:
TRUNCATE TABLE invoice;
TRUNCATE TABLE lhe permite não só remover todos os dados de uma tabela , mas também redefinir o gerador de sequência associado por meio da opção RESET IDENTITY:
Ex:
TRUNCATE TABLE invoice RESET IDENTITY;
Por padrão, a instrução TRUNCATE TABLE não redefine a seqüência associada.
Você pode usar a opção CONTINUE IDENTITY explicitamente na declaração para manter a sequência. No entanto, isso não é necessário.
Remover todos os dados de várias tabelas
Para remover todos os dados de várias mesas ao mesmo tempo , você separar cada tabela por uma vírgula:
TRUNCATE TABLE table_name1, table_name2, ...
Ex:
TRUNCATE TABLE invoice, customer;
Remova todos os dados da tabela que tem referências de chave estrangeira
Na prática, a tabela que você deseja truncar muitas vezes tem as referências de chave estrangeira para outras tabelas que não estão listados na declaração TRUNCATE TABLE.
Por padrão, a instrução TRUNCATE TABLE não remove quaisquer dados a partir da tabela que tem referências de chave estrangeira .
Para remover dados da tabela principal e todas as tabelas que possuem referências de chave estrangeira para a tabela principal , você usar a opção CASCADE como segue:
TRUNCATE TABLE table_name CASCADE;
Por exemplo, para remover todos os dados da tabela "invoice" e todas as tabelas que fazem referência a "invoice" por meio de chave estrangeira , você pode usar a seguinte declaração:
TRUNCATE TABLE invoice CASCADE;
Você deve ter cuidado quando você usa a opção de cascata , ou então você pode potencialmente excluir dados das tabelas que você não tinha a intenção de fazê-lo.
PostgreSQL TRUNCATE TABLE and ON DELETE trigger
Even though the TRUNCATE TABLE statement removes all data from a table, it does not fire any ON DELETE triggers associated with that table.
To fire the trigger when the TRUNCATE TABLE command applied to a table, you must define BEFORE TRUNCATE and/or AFTER TRUNCATE triggers for that table.
PostgreSQL TRUNCATE TABLE and transaction
The TRUNCATE TABLE is transaction-safe, which means if you place it within the transaction statements such as BEGIN … ROLLBACK , the truncation operation will be rolled back safely.
In this tutorial, we have shown you how to remove all data from large tables quickly and efficiently by using the TRUNCATE TABLE statement. In addition, we introduced you to some other options that the statement provides.