Изменения

м
Нет описания правки
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=168d5805e4c08bed7b95d351bf097cff7c07dd65
P.S: Нет, в обобщённом виде через CTE оно не эмулируется, потому что возникают проблемы с типами — типами — как раз недавно сегодня пробовал и обломался. Даже вот такой кейс обламывается, если a или b — b — INT: <tt>WITH v (a, b) AS (VALUES ('1', '2'), ('3', '4')) UPDATE t SET t.b=v.b FROM v WHERE t.a=v.a</tt>. Работает, только если явно указать <tt>'1'::int</tt>, но получается, что через функцию-обёртку ты UPSERT уже не сделаешь — сделаешь — нужно типы всех колонок в приложении (там, где запрос генеришь) знать. Обойти можно только совершенно дебильным способом — <tt>способом — WITH v (a, b) AS ((SELECT a, b FROM t LIMIT 0) UNION ALL SELECT '1', '2' UNION ALL SELECT '3', '4') UPDATE...</tt> — только в этом случае постгрес осиливает '1' и '2' к нужному типу привести.
{{wl-publish: 2015-05-08 18:13:15 +0300 | VitaliyFilippov }}