相当于SQL合并触发器和插入表的PostgreSQL
我不熟悉数据库触发器/PostgreSQL,并尝试将以下SQL触发器转换为PostgreSQL SQL脚本:相当于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
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表的批量复制方式中?