pgsql ON DUPLICATE KEY
时间: 2024-12-30 21:25:37 浏览: 8
### PostgreSQL 处理重复键的方法
自版本 9.5 起,PostgreSQL 提供了 `UPSERT` 功能来处理插入操作中的冲突情况。这种功能通过 `ON CONFLICT` 子句实现,允许指定当发生唯一约束或主键冲突时应采取的操作。
#### 插入并更新(UPSERT)
下面是一个典型的例子,展示了如何使用 `INSERT ... ON CONFLICT` 来执行插入或更新操作:
```sql
INSERT INTO the_table (id, column_1, column_2)
VALUES (1, 'A', 'X'), (2, 'B', 'Y'), (3, 'C', 'Z')
ON CONFLICT (id) DO UPDATE SET
column_1 = EXCLUDED.column_1,
column_2 = EXCLUDED.column_2;
```
此语句尝试向表 `the_table` 中插入三行数据。如果某一行的 `id` 已经存在,则会触发 `ON CONFLICT` 部分,并按照设定的方式更新现有记录[^1]。
对于更复杂的场景,可以进一步定制化 `DO UPDATE` 的行为,比如仅在某些条件下才进行更新,或是忽略特定列不作更改等。
#### 忽略冲突而不做任何修改
有时可能希望在遇到冲突时不改变已有数据而是简单跳过该条目,在这种情况下可采用如下方式:
```sql
INSERT INTO the_table (id, column_1, column_2)
VALUES (1, 'A', 'X'), (2, 'B', 'Y'), (3, 'C', 'Z')
ON CONFLICT (id) DO NOTHING;
```
这将使得每当检测到有违反唯一性的条件时就放弃当前待插入的数据项而不会引发错误。
阅读全文