Postgresql批量插入和冲突批量更新

时间:2016-10-15 20:11:25

标签: sql postgresql

我试图批量插入postgres数据库并在冲突时更新冲突的行。我想知道最好的方法是什么。查询我目前无法插入任何行,但如果我删除了冲突,它就可以完美地运行。我也没有从我能说出的任何错误中得到任何错误。

以下是我目前使用的查询: 'INSERT INTO table (x1, x2, x3, ...) VALUES %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,... ON CONFLICT DO UPDATE SET (x4, x5, x6) = %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,...'

我有一个函数用表格(x1,x2,...)的元组填充%s值

我的表看起来像这样 Table "public.table" Column | Type | Modifiers
--------------+---------+----------------------------------------------- id | integer | not null default nextval('table_id_seq'::regclass) x1 | text | not null x2 | text | not null x3 | integer | not null x4 | text | not null x5 | text | not null x6 | text | not null Indexes: "table_feature_pkey" PRIMARY KEY, btree (id)

提前致谢。如果您需要其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

您将使用明显不正确的语法。有桌子

create table a_table(id serial primary key, x1 int, x2 int);

psql

中尝试此操作
insert into a_table (x1, x2) 
values (1,2), (3,4)
on conflict do
update set (x1, x2) = (1,2), (3,4);

获取

ERROR:  syntax error at or near "3"
LINE 4:  update set (x1, x2) = (1,2), (3,4);

另一方面,ON CONFLICT在这种情况下毫无意义。冲突永远不会发生,因为所使用的列(或列组)都不是唯一的。

检查INSERT syntax,详细了解UPSERT in wiki

答案 1 :(得分:0)

1.在插入之前

enter image description here

2.command

enter image description here

3.插入后

enter image description here