PostgreSQL,使用select插入在冲突do更新时失败

PostgreSQL,使用select插入在冲突do更新时失败,sql,postgresql,Sql,Postgresql,我试图解决在pg12中插入pk失败时进行更新的问题。我认为,这很容易,只是在查询中出现冲突。。。但是没有。 运行查询时,出现以下错误: ERROR: column excluded.fec does not exist LINE 25: ...ON CONFLICT (address) DO UPDATE SET saldo.fecha = EXCLUDED.f... ^

我试图解决在pg12中插入pk失败时进行更新的问题。我认为,这很容易,只是在查询中出现冲突。。。但是没有。 运行查询时,出现以下错误:

ERROR:  column excluded.fec does not exist
LINE 25: ...ON CONFLICT (address) DO UPDATE SET saldo.fecha = EXCLUDED.f...
                                                              ^
SQL state: 42703
Character: 1052
下表:

CREATE UNLOGGED TABLE wallet.saldo
(
    address character varying(42) COLLATE pg_catalog."default" NOT NULL,
    fecha timestamp without time zone NOT NULL,
    saldo numeric(60,20) NOT NULL,
    CONSTRAINT wallet_saldo_address_pk PRIMARY KEY (address)
)
查询:

INSERT INTO wallet.saldo(address, fecha, saldo)

select  '0xaa515035c04aab' as token_address,  max(block_timestamp)::date as fec, sum(importe) as imp 
from (

    SELECT 
        tt.block_timestamp, tt.value::numeric(60,20) / ('1' || left('0000000000000000000000000', t.decimals))::numeric * -1 as importe
    FROM raw.token_transfers tt inner join raw.tokens t on t.address = tt.token_address
    where to_address = '0xaa515035c04aab'
    and tt.block_timestamp between '20201009 00:00:00' and '20201009 23:59:59.99999'

    union

    SELECT 
        tt.block_timestamp, (tt.value::numeric(60,20) / ('1' || left('0000000000000000000000000', t.decimals))::numeric) as importe
    FROM raw.token_transfers tt inner join raw.tokens t on t.address = tt.token_address
    where from_address = '0xaa515035c04aab'
    and tt.block_timestamp between '20201009 00:00:00' and '20201009 23:59:59.99999'

) as det

ON CONFLICT (address) DO UPDATE SET saldo.fecha = EXCLUDED.fec,  saldo.saldo = EXCLUDED.imp

;
select DET工作正常,返回正确的值,如果尝试用DET(别名)替换EXCLUDED,则错误相同


请问,我做错了什么?

排除总是指目标表的列名,而不是源。您也不能使用分配左侧的目标表名称

所以你需要

SET fecha = EXCLUDED.fecha,  
    saldo = EXCLUDED.saldo

错误消息非常清楚:“列fec不存在”,也不存在imp列是的,谢谢,你说得对,我复制了一个版本的查询和previos的结果。我编辑了这个问题,非常感谢!对我刚刚删除了表名集。