从postgresql数据库中选择值并根据我需要完整查询插入/更新

时间:2013-06-11 16:00:00

标签: postgresql amazon-redshift

我需要在查询级别设计这个,这可以用于表格中的版本,删除,标记列。

src_emp ---->源表

empno,ename,sal
1    ,aaa  ,1000
2    ,bbb  ,2000
3    ,ccc  ,3000

首先加载目标表trg_emp输出如下所示

empkey,empno,ename,sal  ,version,flag,deleted
1     ,1    ,aaa  ,1000 ,1      ,Y   ,N
2     ,2    ,bbb  ,2000 ,1      ,Y   ,N
3     ,3    ,ccc  ,3000 ,1      ,Y   ,N

现在执行此操作后,我将把empno = 3的工资更改为sal = 4000 然后更新我的目标表后看起来像

empkey,empno,ename,sal  ,version,flag,deleted
1     ,1    ,aaa  ,1000 ,1      ,Y   ,N
2     ,2    ,bbb  ,2000 ,1      ,Y   ,N
3     ,3    ,ccc  ,3000 ,1      ,N   ,N
4     ,3    ,ccc  ,4000 ,2      ,Y   ,N

上面你可以观察到版本增加到2为empno = 3并且标志已经变为最后一行为“Y”而前一行为“N”为empno = 3 好的,一旦版本和标志工作,那么如果在源中删除任何记录则删除第三个然后该标志必须变为'Y' 假设我在源表中删除了empno = 2 那么我的最终目标表应该看起来像格式

empkey,empno,ename,sal,version,flag,deleted
1,1,aaa,1000,1,Y,N
2,2,bbb,2000,1,Y,Y
3,3,ccc,3000,1,N,N
4,3,ccc,4000,2,Y,N

在目标表中,第二行标志必须将删除的标志值更新为“Y”。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以使用postgresql使用TRIGGERS强制这种行为。 您必须在引用触发器功能的表中创建一个触发器。

有关创建触发器的更多信息: http://www.postgresql.org/docs/current/static/sql-createtrigger.html

以及有关创建触发器函数的信息: http://www.postgresql.org/docs/current/static/plpgsql-trigger.html