pgsql ON CONFLICT
时间: 2023-08-21 22:08:30 浏览: 108
PGSQL ODBC 13
在 PostgreSQL 中,ON CONFLICT 子句用于处理插入操作中的冲突。它允许你指定在发生冲突时要执行的操作。
以下是使用 ON CONFLICT 的一些常见用法:
1. 忽略冲突:
```sql
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON CONFLICT DO NOTHING;
```
如果插入操作中出现冲突,则忽略冲突并继续执行。
2. 更新冲突的行:
```sql
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON CONFLICT (constraint_column)
DO UPDATE SET column1 = new_value1, column2 = new_value2, ...;
```
如果插入操作中出现冲突,则更新冲突行的指定列。
3. 执行自定义的处理逻辑:
```sql
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON CONFLICT (constraint_column)
DO
-- 执行自定义逻辑
-- 可以使用 EXCLUDED 伪表引用冲突的行数据
-- 例如:UPDATE SET column = EXCLUDED.column + 1;
```
如果插入操作中出现冲突,则执行自定义的处理逻辑。
请注意将上述代码中的 `table_name` 替换为实际的表名,`constraint_column` 替换为唯一约束或主键列名,`column1, column2, ...` 替换为要插入或更新的列名,`value1, value2, ...` 替换为实际的值。
使用 ON CONFLICT 子句,你可以在插入操作中处理冲突,并根据需要执行不同的操作。
阅读全文