批量插入,如果在Postgres上发生冲突(批量插入),则进行更新

我正在编写一个数据挖掘程序,该程序会批量插入用户数据。

当前的SQL只是简单的批量插入:

insert into USERS(
    id, username, profile_picture)
select unnest(array['12345']),
    unnest(array['Peter']),
    unnest(array['someURL']),
on conflict (id) do nothing;

如果发生冲突,我该如何进行更新?我试过了:

...
    unnest(array['Peter']) as a,
    unnest(array['someURL']) as b,
on conflict (id) do 
update set
    username = a,
    profile_picture = b;

但这会引发There is a column named "a" in table "*SELECT*", but it cannot be referenced from this part of the query.错误。

编辑

USERS很简单:

create table USERS (
    id      text not null primary key,
    username    text,
    profile_picture text
);

原来有一个特殊的表,名为excluded包含要插入的行(虽然是奇怪的名字)

insert into USERS(
    id, username, profile_picture)
select unnest(array['12345']),
    unnest(array['Peter']),
    unnest(array['someURL'])
on conflict (id) do 
update set
    username = excluded.username,
    profile_picture = excluded.profile_picture;

http://www.postgresql.org/docs/9.5/static/sql-insert.html#SQL-ON-CONFLICT

ON CONFLICT DO UPDATE中的SET和WHERE子句可以使用表名(或别名)访问现有行,并使用特殊的排除表访问建议插入的行...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果在 Oracle 上插入或更新不存在

来自分类Dev

如果在foreach中发生错误,请继续插入

来自分类Dev

使用peewee进行批量处理的批量插入

来自分类Dev

交易-避免插入时发生冲突

来自分类Dev

从python批量插入postgres表

来自分类Dev

如何更新,如果在MySQL存在,否则插入

来自分类Dev

批量插入

来自分类Dev

ElasticSearch批量插入/更新操作

来自分类Dev

MS SQL批量更新\插入

来自分类Dev

PHP PDO插入批量记录或更新(如果存在)

来自分类Dev

使用无状态会话进行批量插入/更新-Hibernate

来自分类Dev

使用typeORM进行批量插入/更新的有效方法

来自分类Dev

使用无状态会话进行批量插入/更新-Hibernate

来自分类Dev

批量插入不插入

来自分类Dev

如果在插入大量数据时网络连接丢失,会发生什么?

来自分类Dev

如果在插入大量数据时网络连接丢失,会发生什么?

来自分类Dev

Python psycopg2发生冲突时进行插入和更新-根据条件设置数据以存在的ID

来自分类Dev

如果存在则更新,如果在MySQL中不存在则插入行

来自分类Dev

使用Python脚本进行Mozenda批量插入

来自分类Dev

使用QueryCommand对象进行批量插入

来自分类Dev

使用foreach与mybatis进行批量插入

来自分类Dev

在 Oracle 中使用 FORALL 进行批量插入

来自分类Dev

如何针对minimongo进行海量批量插入而无需在每个插入上重新计算依赖查询

来自分类Dev

使用R批量插入/更新到mongoDB

来自分类Dev

使用WITH CTE对冲突进行POSTGRES插入/更新

来自分类Dev

如果在github中存在同名分支,那么新创建并推送的本地分支会发生冲突吗?

来自分类Dev

如果在github中存在同名分支,那么新创建并推送的本地分支会发生冲突吗?

来自分类Dev

如果在更新之前执行插入操作,是否需要提交代码?

来自分类Dev

如果在sqlite android中更新查询失败,如何插入记录

Related 相关文章

  1. 1

    如果在 Oracle 上插入或更新不存在

  2. 2

    如果在foreach中发生错误,请继续插入

  3. 3

    使用peewee进行批量处理的批量插入

  4. 4

    交易-避免插入时发生冲突

  5. 5

    从python批量插入postgres表

  6. 6

    如何更新,如果在MySQL存在,否则插入

  7. 7

    批量插入

  8. 8

    ElasticSearch批量插入/更新操作

  9. 9

    MS SQL批量更新\插入

  10. 10

    PHP PDO插入批量记录或更新(如果存在)

  11. 11

    使用无状态会话进行批量插入/更新-Hibernate

  12. 12

    使用typeORM进行批量插入/更新的有效方法

  13. 13

    使用无状态会话进行批量插入/更新-Hibernate

  14. 14

    批量插入不插入

  15. 15

    如果在插入大量数据时网络连接丢失,会发生什么?

  16. 16

    如果在插入大量数据时网络连接丢失,会发生什么?

  17. 17

    Python psycopg2发生冲突时进行插入和更新-根据条件设置数据以存在的ID

  18. 18

    如果存在则更新,如果在MySQL中不存在则插入行

  19. 19

    使用Python脚本进行Mozenda批量插入

  20. 20

    使用QueryCommand对象进行批量插入

  21. 21

    使用foreach与mybatis进行批量插入

  22. 22

    在 Oracle 中使用 FORALL 进行批量插入

  23. 23

    如何针对minimongo进行海量批量插入而无需在每个插入上重新计算依赖查询

  24. 24

    使用R批量插入/更新到mongoDB

  25. 25

    使用WITH CTE对冲突进行POSTGRES插入/更新

  26. 26

    如果在github中存在同名分支,那么新创建并推送的本地分支会发生冲突吗?

  27. 27

    如果在github中存在同名分支,那么新创建并推送的本地分支会发生冲突吗?

  28. 28

    如果在更新之前执行插入操作,是否需要提交代码?

  29. 29

    如果在sqlite android中更新查询失败,如何插入记录

热门标签

归档