Upsert into select PostgreSQL 9.5

时间:2017-05-05 08:48:39

标签: postgresql upsert

我正在尝试将INSERT INTO SELECT语法与ON CONFLICT方法结合起来以实现UPSERT,但是当我尝试声明ON CONFLICT时出现错误。由于我插入的值来自不同的表,因此我添加了奖励,我首先进行了CTE以使所有JOIN不在实际的UPSERT查询中。这是我写的:

WITH upd (a,b,c) AS (
SELECT id_object, field1, table2.id_table2
FROM table1
LEFT JOIN table2 ON table2.field2=table1.field1)
INSERT INTO new_table(id_new, field1, id_table2) 
SELECT a,b,c
FROM upd
ON CONFLICT (id_new) DO UPDATE
SET field1=excluded.b, id_table2=excluded.c 
;

使用此查询,我收到一个错误,即排除的列不存在。

出于测试目的,这是一个数据示例:

CREATE TABLE 
table2 (id_table2 int PRIMARY KEY, 
        field2 varchar(10));

CREATE TABLE
table1 (id_object int PRIMARY KEY, 
        field1 varchar(10), 
        id_table2 int REFERENCES table2(id_table2));

CREATE TABLE
new_table (id_new int PRIMARY KEY,
           field1 varchar (10),
           id_table2 int REFERENCES table2(id_table2));

INSERT INTO table2 VALUES (1,'text1');
INSERT INTO table2 VALUES (2,'text2');
INSERT INTO table1 VALUES (1,'text1',1);
INSERT INTO table1 VALUES (2,'text1',1);
INSERT INTO table1 VALUES (3,'text2',2);

有人能指出我的查询中出现了什么问题吗? 感谢

0 个答案:

没有答案