Re: BUG #6048: TRUNCATE vs TRUNCATE CASCADE: misleading message

From: Alexey Klyukin <alexk(at)commandprompt(dot)com>
To: Artiom Makarov <artiom(dot)makarov(at)gmail(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #6048: TRUNCATE vs TRUNCATE CASCADE: misleading message
Date: 2011-06-02 15:04:29
Message-ID: 4D7D2D17-FD02-44D7-BE00-340369E816DB@commandprompt.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


On Jun 2, 2011, at 2:23 PM, Artiom Makarov wrote:

>
> The following bug has been logged online:
>
> Bug reference: 6048
> Logged by: Artiom Makarov
> Email address: artiom(dot)makarov(at)gmail(dot)com
> PostgreSQL version: 9.04
> Operating system: 2.6.32-30-server #59-Ubuntu SMP Tue Mar 1 22:46:09 UTC
> 2011 x86_64 GNU/Linux
> Description: TRUNCATE vs TRUNCATE CASCADE: misleading message
> Details:
>
> create table tr_test1(id1 int, primary key(id1));
> create table tr_test2(id2 int, id int, primary key(id2), foreign key (id)
> references tr_test1(id1) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE
> RESTRICT);
> create table tr_test3(id3 int, id int, primary key(id3), foreign key (id)
> references tr_test2(id2) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE
> RESTRICT);
>
> insert into tr_test1(id1) values (1);
> insert into tr_test2(id2,id) values (1,1);
> insert into tr_test2(id2,id) values (2,1);
> insert into tr_test3(id3,id) values (1,2);
>
> truncate tr_test1;
>
> ERROR: cannot truncate a table referenced in a foreign key constraint
> SQL state: 0A000
> Detail: Table "tr_test2" references "tr_test1".
> Hint: Truncate table "tr_test2" at the same time, or use TRUNCATE ...
> CASCADE.
>
> This is definetly misleading message, because of when applying truncate
> tr_test1 CASCADE; all 3 tables truncated:

What would you expect to happen for TRUNCATE .. CASCADE?

One thing I find potentially surprising is that TRUNCATE CASCADE doesn't follow the semantics of 'ON DELETE' clause for the foreign key, i.e. it would truncate the dependent table even with ON DELETE RESTRICT foreign key. Do we need a similar 'ON TRUNCATE' FK clause?

>
> NOTICE: truncate cascades to table "tr_test2"
> NOTICE: truncate cascades to table "tr_test3"
>
>
> While drop schema public; command list all affected objects:
>
> ERROR: cannot drop schema public because other objects depend on it
>
> SQL state: 2BP01
> Detail: table tr_test1 depends on schema public
> table tr_test2 depends on schema public
> table tr_test3 depends on schema public
> Hint: Use DROP ... CASCADE to drop the dependent objects too.

--
Alexey Klyukin
The PostgreSQL Company - Command Prompt, Inc.

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Artiom Makarov 2011-06-02 15:21:03 Re: BUG #6048: TRUNCATE vs TRUNCATE CASCADE: misleading message
Previous Message Tom Lane 2011-06-02 14:10:04 Re: BUG #6047: prepare p1 as select 'now'::timestamp; then "execute p1" many times, they return the same time