PostgreSQL - 导入后触发

时间:2017-09-25 23:34:49

标签: postgresql triggers

我有一个包含两个表A和B的数据库.A比B大得多。

根据某些特定标准,我有一个根据表A中的记录构建的视图。让我们称之为V a

第二个视图,V V a -B ,与V a 和B(所有记录)上的记录不同在V a 上不在B)中。 V a 的大小大于或等于B。

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

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

因为V V a -B 同时取决于A和B,我不知道在哪里放置触发器。如果我把它放在A上,视图将不会包含所有数据。如果我把它放在B上,我怎么能保证每次进口不会重复多次?仅手动使用存储过程(函数)会更好吗?

谢谢。

编辑:添加"每个最近创建的元素"为了澄清,触发器不必每次都循环遍历V V a -B 中的所有记录,只是最近添加的记录。

1 个答案:

答案 0 :(得分:0)

如果您可以编写一个触发器,只要A(或B)中的行被修改,就会更改A中的必要记录,您可以编写一个触发器(或两个)来执行操作。如果您担心,这些视图会立即反映表格中的变化。

但是,如果触发器功能不昂贵,这个解决方案是值得称道的 - 它将针对每个修改过的行执行。

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