Ao executar:
TRUNCATE TABLE YYYYY RESTART IDENTITY
Estou vendo esta mensagem de erro:
ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "XXXXX" references "YYYYY".
HINT: Truncate table "XXXXX" at the same time, or use TRUNCATE ... CASCADE.
Das duas sugestões em HINT
:
Usar
TRUNCATE ... CASCADE
faz sentido e funciona, mas é menos explícito porque é preciso inspecionarYYYYY
para ver onde vai a cascata. Isso me faz querer tentar a outra opção:Truncate table "XXXXX" at the same time
, mas minha pergunta:O que significa truncar uma tabela
at the same time
?
Eu tentei adicionar um TRUNCATE XXXXX...
(e envolvê-los em um BEGIN
/ COMMIT
), mas isso gera o mesmo erro.
Significa com a mesma declaração. Você pode truncar mais de uma tabela:
Mais detalhes nos documentos do Postgres:
TRUNCATE
.1) Truncados em cascata podem ser perigosos. Se você tiver uma tabela de pesquisa (neste caso, acredito que XXXX), dê adeus porque ela será truncada e você perderá todos esses dados.
Por exemplo, você tem uma tabela de Clientes (AAAA) com um FK para Pedidos (XXXX). Quando você truncar YYYY usando um truncado em cascata, ele truncará YYYY. Caso contrário, ele exibirá o erro de truncar que você está vendo.
2) Truncar a tabela 'XXXX' ao mesmo tempo significa que está sugerindo que você trunque sua tabela de consulta/referência também.