Re: ON CONFLICT DO UPDATE using EXCLUDED.column gives an error about mismatched types

Поиск
Список
Период
Сортировка
От Amit Langote
Тема Re: ON CONFLICT DO UPDATE using EXCLUDED.column gives an error about mismatched types
Дата
Msg-id 55C08610.1080901@lab.ntt.co.jp
обсуждение исходный текст
Ответ на Re: ON CONFLICT DO UPDATE using EXCLUDED.column gives an error about mismatched types  (Geoff Winkless <pgsqladmin@geoff.dj>)
Ответы Re: ON CONFLICT DO UPDATE using EXCLUDED.column gives an error about mismatched types
Список pgsql-hackers
On 2015-08-04 PM 05:58, Geoff Winkless wrote:
> 
> ​Although it seems Amit has defined the problem better than I could, so
> this is a bit late to the party (!), yes, the table had been ALTERed after
> it was created (looking back through the history, that modification
> included at least one DROP COLUMN).
> 

It seems using any columns that used to be after a dropped columns cause
EXCLUDE pseudo-relation to misbehave. For example, I observed another symptom:

test=# CREATE TABLE upsert_fail_test(a int, b int, c int, d smallint);
CREATE TABLE

test=# ALTER TABLE upsert_fail_test DROP b;
ALTER TABLE

test=# ALTER TABLE upsert_fail_test ADD PRIMARY KEY (a, c, d);
ALTER TABLE

test=# INSERT INTO  upsert_fail_test(a, c, d) VALUES (1, 2, 3) ON CONFLICT
(a, c, d) DO UPDATE SET c = EXCLUDED.c;
INSERT 0 1

test=# INSERT INTO  upsert_fail_test(a, c, d) VALUES (1, 2, 3) ON CONFLICT
(a, c, d) DO UPDATE SET c = EXCLUDED.c;
ERROR:  null value in column "c" violates not-null constraint
DETAIL:  Failing row contains (1, null, 3).

Or, the EXCLUDED pseudo-rel failed to deliver '2' produced by the subplan
and instead produced a 'null' which I guess was caused by the dropped
column 'b'.

Perhaps, it may have to do with how EXCLUDED pseudo-rel's targetlist is
manipulated through parse-plan stage?

Thanks,
Amit




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

Предыдущее
От: Rajeev rastogi
Дата:
Сообщение: Re: Autonomous Transaction is back
Следующее
От: Ashutosh Bapat
Дата:
Сообщение: Re: GROUP BY before JOIN