Thread: Dferred constraints not deferred?

Dferred constraints not deferred?

From
Jean-Christian Imbeault
Date:
I'm trying to drop a table inside a transaction with all constraints
deferred, and then re-create the table, but PG won't let me ..

TAL=# begin;
BEGIN
TAL=# SET CONSTRAINTS ALL DEFERRED;
SET CONSTRAINTS
TAL=# drop table invoices;
NOTICE:  constraint $1 on table invoice_admin_memo depends on table invoices
NOTICE:  constraint $1 on table req_dlv_date depends on table invoices
NOTICE:  constraint $1 on table invoice_li depends on table invoices
NOTICE:  constraint $1 on table invoice_emails depends on table invoices
ERROR:  Cannot drop table invoices because other objects depend on it
         Use DROP ... CASCADE to drop the dependent objects too

I tought the point of "SET CONSTRAINTS ALL DEFERRED" was to make
transaction skip constraint checking until the end of a transaction ...
But in this case the foreign key constraints a checked right away ...

What I would like is to drop the table and recreate it without having PG
complain about these FK constraints until the very end of the
transaction (at which time all data will be consistant) ... is this
possible?

Thanks,

Jc


Re: Dferred constraints not deferred?

From
Stephan Szabo
Date:
On Mon, 3 Feb 2003, Jean-Christian Imbeault wrote:

> I'm trying to drop a table inside a transaction with all constraints
> deferred, and then re-create the table, but PG won't let me ..
>
> TAL=# begin;
> BEGIN
> TAL=# SET CONSTRAINTS ALL DEFERRED;
> SET CONSTRAINTS
> TAL=# drop table invoices;
> NOTICE:  constraint $1 on table invoice_admin_memo depends on table invoices
> NOTICE:  constraint $1 on table req_dlv_date depends on table invoices
> NOTICE:  constraint $1 on table invoice_li depends on table invoices
> NOTICE:  constraint $1 on table invoice_emails depends on table invoices
> ERROR:  Cannot drop table invoices because other objects depend on it
>          Use DROP ... CASCADE to drop the dependent objects too
>
> I tought the point of "SET CONSTRAINTS ALL DEFERRED" was to make
> transaction skip constraint checking until the end of a transaction ...
> But in this case the foreign key constraints a checked right away ...
>
> What I would like is to drop the table and recreate it without having PG
> complain about these FK constraints until the very end of the
> transaction (at which time all data will be consistant) ... is this
> possible?

Not really.  Deferrability refers to the "check" time of the constraint
which is unrelated to the drops that are necessary for a table drop which
AFAIR was direct text in the drops.