postgresql ON CONFLICT ON CONSTRAINT有2个约束

Sky*_*.86 8 postgresql upsert sql-insert

我正在使用PostgreSQL 9.5,并想知道是否有可能在ON CONFLICT ON CONSTRAINT语句中包含2个约束的名称.我的sql在下面

INSERT INTO LIVE.TABLE (column1, column2, column3)
SELECT DISTINCT ON (cloumn1) column1, column2, column3
FROM STAGE.TABLE
?ON CONFLICT ON CONSTRAINT live.table.pkey DO NOTHING
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想要做的是在ON CONFLICT ON CONSTRAINT语句中包含第二个约束.我尝试过以下选项,但它似乎对我不起作用.

INSERT INTO LIVE.TABLE (column1, column2, column3)
SELECT DISTINCT ON (cloumn1) column1, column2, column3
FROM STAGE.TABLE
?ON CONFLICT ON CONSTRAINT live.table.pkey, live.table.fkey1 DO NOTHING
Run Code Online (Sandbox Code Playgroud)

任何建议将受到高度赞赏.

jia*_*ian 5

似乎您不能附加两个约束名称,例如

ON CONFLICT ON CONSTRAINT live.table.pkey, live.table.fkey1 DO NOTHING
Run Code Online (Sandbox Code Playgroud)

但是你可以

  • ON CONFLICT ( col1, col2 ) DO NOTHING.

或者

  • ON CONFLICT DO NOTHING

指定 ON CONFLICT 通过选择仲裁索引对哪些冲突采取替代操作。要么执行唯一索引推断,要么显式命名约束。对于ON CONFLICT DO NOTHING,可以选择指定conflict_target;省略时, 将处理与所有可用约束(和唯一索引)的冲突。对于ON CONFLICT DO UPDATE,必须提供conflict_target。

https://www.postgresql.org/docs/current/sql-insert.html#SQL-ON-CONFLICT


小智 -4

使用上面的列创建一个约束,例如,

CONSTRAINT live_table_ukey UNIQUE(live.table.pkey, live.table.fkey1)
Run Code Online (Sandbox Code Playgroud)

然后在约束语句冲突时使用此键。

  • 这可能适合 OP(信息不足),但这与具有两个唯一约束(一个在“pkey”上,另一个在“fkey1”上)不同。 (6认同)