2017-09-25 76 views
0

后,我有两个表,A和B. A中的数据库比B.PostgreSQL的 - 触发进口

更大

从一些具体的标准,我从表A的记录建立了一个观点我们称之为V a

的第二视图,V V 一个 -B,是bewteen它们是开V 一个和B(开V 一个不在B中的所有记录)记录的差异。 V a大于或等于B的大小。

两个表A和B都具有相同的列结构,除了一个序列号。数据通过从CSV文件导入而加载到这些表中。有一个列会自动填写创建每条记录的日期。进口应按月进行。

问题:我需要更新表A的存在,其以V V 一个 -B,最近创建的(即,A和B导入新数据后),并有一些外地记录作为NULL(我猜这不重要)。触发函数应该看看每个最近创建的元素V V a -B在上个月中是否具有精确副本。如果有,则应将该字段的值从旧记录复制到新记录。如果不是,则写入一些预定义的值。

由于V V 一个 -B既取决于A和B,我不知道放在哪里了扳机。如果我把它放在A上,视图将不会包含所有数据。如果我把它放在B上,我如何确保每次进口不会重复多次?手动使用存储过程(函数)会更好吗?

谢谢。

编辑:补充说:“每个新近创建的元素”澄清,触发具有不循环,均以V V 一个 -B每一次的记录,只是最近添加的。

+0

NULL不是一个值,所以它不能是主键的值。 – wildplasser

回答

0

如果您可以编写触发器,只要A(或B)中的某行被修改,您就可以编写一个触发器(或两个)来执行操作。如果这是您的担忧,这些观点将立即反映表格中的变化。

但是这种解决方案只有在触发功能并不昂贵的情况下才值得推荐–它会针对每个修改后的行执行。

如果您不能轻松编写一个简单的触发函数来实现这个技巧,那么更好的解决方案是在A和B被修改后引入一个后处理步骤。