我想在 postgreSQL 中实现 SCD2。现在,我正在尝试使用“创建规则”,因为我想根据临时表(例如,截断和加载的 STG)更新主表(例如 MAIN)。
因此,每当临时表 (STG) 中有插入时,应自动执行以下操作。
如果它的新记录(存在于 STG 但不在 MAIN 中)插入到 MAIN/主表 (MAIN),则设置 flag=1。
并且低于 2 个 sqls i。如果主表 (MAIN) 已经存在于阶段表 (STG) 中,则更新其非键记录并设置活动标志 =1。ii. 将旧记录标记为非活动可能在 MAIN 表中将标志设置为 0。
我正在尝试下面的东西,但它不起作用。请提出更好的方法/正确的 SQL。它可以与规则/触发器一起使用。
--SQL to UPDATE record in MAIN table as active record with flag=1.
create rule r_upd as on insert to STG
where (exists (select 1 from STG where STG.id=NEW.id))
do
update MAIN set flag=1 where id=NEW.id;
--
There is one more rule (or can be done in one SQL) required which can set old record to inactive (FLAG=0)
--
--
--SQL to INSERT recrord in MAIN table as active record with flag=1
create rule r_ins as on insert to STG
do
insert into MAIN
select id, 1 from STG where id not in (select id from MAIN);
谢谢你。