Postgresql 对于批量输入,如何更新匹配行并将不匹配行作为新行插入?
我有一个表'employee',有两列'firstname'和'lastname',它对'lastname'列有唯一的约束 如果发送多行,如何从输入中更新匹配行并为未匹配行创建新行 数据库中的现有数据:Postgresql 对于批量输入,如何更新匹配行并将不匹配行作为新行插入?,postgresql,Postgresql,我有一个表'employee',有两列'firstname'和'lastname',它对'lastname'列有唯一的约束 如果发送多行,如何从输入中更新匹配行并为未匹配行创建新行 数据库中的现有数据: |id | firstname | lastname | +----+-------------+-----------+ | 1 | John | Doe | 输入行: | firstname | lastname | +-----------+----
|id | firstname | lastname |
+----+-------------+-----------+
| 1 | John | Doe |
输入行:
| firstname | lastname |
+-----------+-----------+
| John1 | Doe |
| Bar | foo |
以下是我正在使用的脚本:
INSERT INTO Identification (firstname,lastname)
(VALUES
('John1','Doe'),
('Bar','foo')) as u2
ON CONFLICT ON CONSTRAINT lname_unique_constraint
DO UPDATE
SET
firstname = u2.firstname
RETURNING Id;
它给了我这个错误:
错误:“as”处或附近出现语法错误
如果脚本工作正常,则应使数据库保持以下状态:
|id | firstname | lastname |
+----+-------------+-----------+
| 1 | John1 | Doe |
| 2 | Bar | foo |
注:
我使用的是PostgreSQL 10.6,
id
列的类型为number,并设置为自动序列 您可以使用排除的:
请注意,特殊排除表用于参考最初建议插入的值
INSERT INTO Identification (firstname,lastname)
VALUES
('John1','Doe'),
('Bar','foo')
ON CONFLICT ON CONSTRAINT fname_unique_constraint
DO UPDATE
SET
firstname = EXCLUDED.firstname
RETURNING Id;