Re: BUG #16661: Changing columns after the rule is created leads to an error when the RETURNING is used

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #16661: Changing columns after the rule is created leads to an error when the RETURNING is used
Дата
Msg-id 2576538.1602178210@sss.pgh.pa.us
обсуждение исходный текст
Ответ на BUG #16661: Changing columns after the rule is created leads to an error when the RETURNING is used  (PG Bug reporting form <noreply@postgresql.org>)
Список pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> writes:
> The SQL:

> CREATE TABLE rule_bug_table (
>         id serial NOT NULL PRIMARY KEY,
>         archived boolean  NOT NULL
> );

> CREATE OR REPLACE RULE rule_bug_table__archive_instead_of_delete__rule
>     AS ON DELETE TO rule_bug_table
>     DO INSTEAD
>     UPDATE rule_bug_table
>     SET archived = true
>     WHERE rule_bug_table."id" = OLD."id"
>     RETURNING OLD.*;
    
> ALTER TABLE rule_bug_table ADD COLUMN select_allowed boolean NOT NULL
> DEFAULT (false);

> DELETE FROM rule_bug_table WHERE id = 1 RETURNING *;

> gives an error "could not find replacement targetlist entry for attno 3".

Hmm.  The error message definitely needs to be more user-friendly,
but I don't think this is actually a bug.  The rule's RETURNING clause
expands to this during parsing:

  RETURNING old.id, old.archived

as you can see with "\d+ rule_bug_table".  Then when you try to do
"RETURNING *" in the DELETE, that's asking for a column not available
from the rewritten query.  So you *should* get an error, just not one
that looks like it's an internal failure.

The root issue here is that "*" is expanded at parse time for stored
rules and views.  Unfortunately, that behavior is specifically demanded
by the SQL spec (at least for the view case), so I doubt we can change it.

            regards, tom lane



В списке pgsql-bugs по дате отправления:

Предыдущее
От: PG Bug reporting form
Дата:
Сообщение: BUG #16662: pgbench: error: client 418 script 0 aborted in command 5 query 0: ERROR: invalid page in block 4830
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: BUG #16662: pgbench: error: client 418 script 0 aborted in command 5 query 0: ERROR: invalid page in block 4830