2

我想在 postgreSQL 中实现 SCD2。现在,我正在尝试使用“创建规则”,因为我想根据临时表(例如,截断和加载的 STG)更新主表(例如 MAIN)。

因此,每当临时表 (STG) 中有插入时,应自动执行以下操作。

  1. 如果它的新记录(存在于 STG 但不在 MAIN 中)插入到 MAIN/主表 (MAIN),则设置 flag=1。

  2. 并且低于 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);

谢谢你。

4

0 回答 0