Em 29/11/07, Leandro DUTRA<[EMAIL PROTECTED]> escreveu:
> 2007/11/29, Fabio Telles <[EMAIL PROTECTED]>:
> > Em 29/11/07, sergio<[EMAIL PROTECTED]> escreveu:
> > > Li essa resposta, mas preciso perguntar.
> > > Se tiver trigger ou Foreign Key?
> > > O truncate não vai servir, aí então só mesmo o delete?
> >
> > Em QUALQUER operação de carga, seja UPDATE, INSERT ou DELETE, você
> > deveria desabilitar todos constraints, triggers, índices, etc. Só
> > depois de concluída a transação você habilita/recria tudo novamente.
>
> Telles, isso vale também para o TRUNCATE?  No Oracle ele é análogo ao
> exp DIRECT = Y, passando por fora de todo tipo de conferência.
> Conceitualmente, nem devia fazer parte da linguagem SQL.

Pela documentação em http://www.postgresql.org/docs/8.2/static/sql-truncate.html
você pode optar pelo TRUNCATE com a opção RESTRICT (padrão) ou
CASCADE. O RESTRICT não permite que você realize o TRUNCATE se houver
qualquer restrição de FK na tabela. Note que a opção de CASCADE surgiu
na versão 8.2 do PostgreSQL.

Em qualquer uma das situações, o TRUNCATE não dispara nenhum gatilho
ON DELETE. O DELETE não é utilizado, e sim um DROP e CREATE. Sendo
assim o TRUNCATE não é uma operação de DML e sim de DDL.

No Oracle, diz a documentação: "You cannot truncate the parent table
of an enabled referential integrity constraint. You must disable the
constraint before truncating the table. An exception is that you can
truncate the table if the integrity constraint is self-referential.".
Ou seja, se comporta como um RESTRICT no PostgreSQL.

Por último... não o TRUNCATE não faz parte do padrão SQL, mas é
amplamente implementado pelos SGDBs.

[]s
Fábio Telles
-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: [EMAIL PROTECTED]
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a