Обсуждение: Deferred Constraints Issues

Поиск
Список
Период
Сортировка

Deferred Constraints Issues

От
kevin kempter
Дата:
Hi List;

I've placed this sql in a script:

psql my_db <<!
begin;
SET CONSTRAINTS ALL DEFERRED ;
delete from account where 1 = 1;
delete from cust where 1 = 1;
delete from cust_type where 1 = 1;
delete from cust_orders where 1 = 1;
commit;
!

The tables have relationships, however I expect the 'SET CONSTRAINTS
ALL DEFERRED' to defer constraint checks.  When I run the script I get
this:


BEGIN
SET CONSTRAINTS
ERROR:  update or delete on table "account" violates foreign key
constraint "account_rel" on table "cust_type"
DETAIL:  Key (account_id)=(1) is still referenced from table
"cust_type".
ERROR:  current transaction is aborted, commands ignored until end of
transaction block
ERROR:  current transaction is aborted, commands ignored until end of
transaction block
ERROR:  current transaction is aborted, commands ignored until end of
transaction block
ROLLBACK


Am I doing something wrong ? Or, is the 'SET CONSTRAINTS ALL DEFERRED'
not working properly ?


Thanks in advance...




Re: Deferred Constraints Issues

От
Stephan Szabo
Дата:
On Tue, 25 Mar 2008, kevin kempter wrote:

> I've placed this sql in a script:
>
> psql my_db <<!
> begin;
> SET CONSTRAINTS ALL DEFERRED ;
> delete from account where 1 = 1;
> delete from cust where 1 = 1;
> delete from cust_type where 1 = 1;
> delete from cust_orders where 1 = 1;
> commit;
> !
>
> The tables have relationships, however I expect the 'SET CONSTRAINTS
> ALL DEFERRED' to defer constraint checks.

IIRC it's defined to only defer constraints created with DEFERRABLE and/or
INITIALLY DEFERRED. The default is NOT DEFERRABLE.