Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 对于批量输入,如何更新匹配行并将不匹配行作为新行插入?_Postgresql - Fatal编程技术网

Postgresql 对于批量输入,如何更新匹配行并将不匹配行作为新行插入?

Postgresql 对于批量输入,如何更新匹配行并将不匹配行作为新行插入?,postgresql,Postgresql,我有一个表'employee',有两列'firstname'和'lastname',它对'lastname'列有唯一的约束 如果发送多行,如何从输入中更新匹配行并为未匹配行创建新行 数据库中的现有数据: |id | firstname | lastname | +----+-------------+-----------+ | 1 | John | Doe | 输入行: | firstname | lastname | +-----------+----

我有一个表'employee',有两列'firstname'和'lastname',它对'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;