在postgreSQL数据库中,归并数据又被称为UPSERT语法,值的是INSERT...ON CONFLICT UPDATE,用来解决在数据插入过程中发生的冲突,如果违反用户自定义约束导致冲突,当发生冲突时,可以忽略该插入操作,也可以执行指定的update语句。
语法格式:
[ WITH [ RECURSIVE ] with_query [, ...] ] INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]
[ OVERRIDING { SYSTEM | USER } VALUE ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ ON CONFLICT [ conflict_target ] conflict_action ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
其中,conflict_target可以是以下之一:
where conflict_target can be one of: ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] )
[ WHERE index_predicate ] ON CONSTRAINT constraint_name
其中,conflict_action is one of:
DO NOTHING DO UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | ( column_name [, ...] ) = ( sub-SELECT ) } [, ...] [ WHERE condition ]
ON CONFLICT 子句作为抛出唯一性冲突或排他性约束冲突错误的一种选择,对于每一个要插入的行,如果违反了conflict_target声明的唯一索引约束,则执行conflict_action 所规定的可选择动作。
ON CONFLICT DO NOTHING:不采取任何动作。
ON CONFLICT DO UPDATE:更新和违反唯一性行
conflict_target:指定冲突目标,即与哪些可用约束或是唯一索引产生冲突
conflict_action:指定一个冲突发生时的可选择动作。它可以是ON CONFLICT DO NOTHING 或是ON CONFLICT DO UPDATE;用来声明一个冲突发生时所要采取的update详细动作




