From: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> |
---|---|
To: | stepanperlov(at)gmail(dot)com |
Cc: | "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG #14421: RETURNING statement in DELETE FROM with REFERENCES |
Date: | 2016-11-12 01:41:26 |
Message-ID: | CAKFQuwYrB5iyfQS6O9mmtbXP96L40BXpnFgoSj8XM88AG+5_AA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Fri, Nov 11, 2016 at 3:27 PM, <stepanperlov(at)gmail(dot)com> wrote:
> The following bug has been logged on the website:
>
> Bug reference: 14421
> Logged by: Stepan Perlov
> Email address: stepanperlov(at)gmail(dot)com
> PostgreSQL version: 9.5.5
> Operating system: ubuntu 14.04
> Description:
>
> Hello
>
> CREATE TABLE test(
> id bigserial PRIMARY KEY,
> parent bigint REFERENCES test(id) ON DELETE CASCADE ON UPDATE CASCADE
> );
> INSERT INTO test VALUES (1, null);
> INSERT INTO test VALUES (2, 1);
> INSERT INTO test VALUES (3, 2);
> INSERT INTO test VALUES (4, 2);
> INSERT INTO test VALUES (5, 2);
> INSERT INTO test VALUES (6, 2);
> INSERT INTO test VALUES (7, 2);
>
> DELETE FROM test
> WHERE id = 2
> RETURNING id;
>
> Returns:
> id
> 2
>
> I expect:
> id
> 2
> 3
> 4
> 5
> 6
> 7
>
Incorrect expectations, not a bug.
The only record deleted from the table specified in DELETE FROM "test" is
the record having id=2. The fact that other records just happened to be
deleted (and just happened to be on the same table) due to a cascade
doesn't factor into it. If you generalize to a normal DELETE/CASCADE,
where the PK is on a different table, you should understand why it doesn't
work that way. In fact, the actions of the CASCADE triggers are invisible
when looking at the output of the causing command (i.e., you get DELETE 1
in the command response, not DELETE 6).
https://www.postgresql.org/docs/9.6/static/sql-delete.html
"
An expression to be computed and returned by the DELETE command after each
row is deleted. The expression can use any column names of the table named
by table_name or table(s) listed in USING. Write * to return all columns.
"
David J.
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2016-11-12 03:33:13 | Re: BUG #14420: Parallel worker segfault |
Previous Message | stepanperlov | 2016-11-11 22:27:11 | BUG #14421: RETURNING statement in DELETE FROM with REFERENCES |