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
相当于SQL合并触发器和插入表的PostgreSQL_Postgresql_Database Trigger_Upsert_Sql Merge - Fatal编程技术网

相当于SQL合并触发器和插入表的PostgreSQL

相当于SQL合并触发器和插入表的PostgreSQL,postgresql,database-trigger,upsert,sql-merge,Postgresql,Database Trigger,Upsert,Sql Merge,我不熟悉数据库触发器/PostgreSQL,并尝试将以下SQL触发器转换为PostgreSQL SQL脚本: CREATE TRIGGER tr_EmpMerger ON Emp INSTEAD OF INSERT AS BEGIN MERGE INTO Emp AS Target USING ( SELECT * FROM INSERTED ) AS Source ON ( Target.EmpId = Source.EmpId ) WHEN

我不熟悉数据库触发器/PostgreSQL,并尝试将以下SQL触发器转换为PostgreSQL

SQL脚本:

CREATE TRIGGER tr_EmpMerger ON Emp INSTEAD OF INSERT
AS
BEGIN
    MERGE INTO Emp AS Target
    USING ( SELECT * FROM INSERTED ) AS Source
    ON
    (   Target.EmpId = Source.EmpId
    )
    WHEN MATCHED THEN UPDATE SET
        EmpName = Source.EmpName,
        Age  =  Source.Age
    WHEN NOT MATCHED THEN INSERT VALUES 
    (
        Source.EmpId,
        Source.EmpName,
        Source.Age        
    );
END
GO
问题:

1) PostgreSQL中是否有SQL插入表的等价物?如果没有,工作重点是什么

2) PostgreSQL支持合并触发器吗?如果没有,工作重点是什么

3) 上述合并触发器的等效PostgreSQL脚本是什么

编辑:


注意-在这种情况下,通过Postgres的大容量复制命令将数据插入Emp表(以及其他表)。因此,在Postgres中没有可用于此表的直接INSERT INTO查询,您可以使用
INSERT
语句中的
on conflict
子句来实现这一点。1)在使用语句级触发器时,也有类似的情况—称为。在大多数情况下,您会在不需要行级触发器的地方使用行级触发器。2) Postgres与MERGE的等价物是
INSERT ON CONFLICT
3)您在Postgres中不需要触发器,直接使用INSERT ON CONFLICT即可。而不是触发器只能在Postgres中的视图上定义,不能在表上定义。感谢您的及时回复!在这种情况下,通过Postgres批量复制将数据插入表中。是否可以将冲突时插入功能添加到将数据插入Postgres表的批量复制方式中?