Suponha que temos uma tabela simples,
CREATE TABLE foo ( a int PRIMARY KEY, b int );
Estou querendo escrever uma consulta complexa dentro e fazer referência a essa consulta
INSERT INTO foo
SELECT 5 AS z
ON CONFLICT (a)
DO UPDATE SET b = z;
No entanto, quando executo isso, estou recebendo um erro como este,
ERROR: column "z" does not exist
LINE 4: DO UPDATE SET b = z;
^
DICA: Existe uma coluna chamada "z" na tabela " SELECT ", mas ela não pode ser referenciada nesta parte da consulta.
Existe uma maneira de fazer uma estrutura como esta funcionar?
O PostgreSQL não vê a coluna pelo alias que você forneceu. Não é assim que é analisado. Ele vê o
z
pelo nome que você tentou inseri-lo comoa
em uma psuedo-tableEXCLUDED
. Você quer fazer isso em vez disso,Para obter mais informações , consulte os documentos em
INSERT
,