Sql Postgres使用行值进行UPSERT更新
如果我的桌子像这样Sql Postgres使用行值进行UPSERT更新,sql,postgresql,unique,upsert,Sql,Postgresql,Unique,Upsert,如果我的桌子像这样 CREATE TABLE public.temperatures ( temperature_io_id integer NOT NULL, temperature_station_id integer NOT NULL, temperature_value double precision NOT NULL, temperature_current_kw double precision NOT NULL, temper
CREATE TABLE public.temperatures (
temperature_io_id integer NOT NULL,
temperature_station_id integer NOT NULL,
temperature_value double precision NOT NULL,
temperature_current_kw double precision NOT NULL,
temperature_value_added integer DEFAULT 1,
temperature_kw_year_1 double precision DEFAULT 0,
/* Keys */
CONSTRAINT temperatures_pkey
PRIMARY KEY (temperature_io_id, temperature_station_id, temperature_value)
) WITH (
OIDS = FALSE
);
我试图在io_id、station_id和temperature具有唯一组合时向表中添加值。如果这个组合已经存在,我想更新kw值,并在value_added字段中添加1。这将用于在该温度下保持kw的运行平均值
INSERT INTO temperatures
(temperature_io_id, temperature_station_id, temperature_value, temperature_curr_kw)
VALUES
(20,30,40,10)
ON CONFLICT
(temperature_io_id, temperature_station_id, temperature_value)
DO UPDATE SET
temperature_current_kwh = ((temperature_current_kw * temperature_value_added) + EXCLUDED.temperature_current_kw) / (temperature_value_added + 1),
temperature_value_added = temperature_value_added + 1;
当我进行更新时,如何访问行中的值?当我尝试访问温度\u电流\u kw
?使用表格别名时,我遇到一个不明确的错误:
INSERT INTO temperatures as t
(temperature_io_id, temperature_station_id, temperature_value, temperature_current_kw)
VALUES
(20,30,40,10)
ON CONFLICT
(temperature_io_id, temperature_station_id, temperature_value)
DO UPDATE SET
temperature_current_kw = ((t.temperature_current_kw * t.temperature_value_added) + EXCLUDED.temperature_current_kw) / (t.temperature_value_added + 1),
temperature_value_added = t.temperature_value_added + 1;
如下列文件所述:
别名
表名称的替代名称。当提供别名时,它会完全隐藏表的实际名称。这尤其重要
当冲突DO UPDATE针对名为excluded的表时非常有用,
因为这也是表示行的特殊表的名称
提议插入
我想我找到了解决办法。如果我将表名放在列的前面,例如
temperatures.temperature\u current\u kw
,它将访问发生插入冲突的数据点?谢谢,这正是我需要的。