【发布时间】:2014-11-10 14:39:31
【问题描述】:
我在 postgresql (v9.3) 中有一个数据库,我总是在批处理过程中添加记录(通过 ogr2ogr 函数)。该批次由具有相同邮政编码的记录组成,这些记录存储在表“location”的“postal_code”列中(例如:location.postal_code = “90210”)。我想创建一个触发器,每次将批次插入数据库时,首先检查是否存在具有相同邮政编码的“旧”记录。如果它们存在,我想删除它们。如果它们不存在,则插入语句直接执行。
我曾想过使用带有“before insert”和“for each statement”的触发器,但“for each statement”阻止我使用“old”和“new”关键字。另外,我读到您不能在表上使用删除函数,而触发器在同一个表上具有“插入前”。关于如何做到这一点的任何想法?
注意:应删除先前批量插入过程中具有相同邮政编码的所有记录。例如:我在 2014 年 1 月 1 日插入了带有邮政编码“90210”的批次 #1,现在我有一个具有相同邮政编码的批次 #2,要在 2014 年 1 月 31 日插入。批次#1 中的所有记录都应该被删除,批次#2 中的所有记录都应该插入到数据库中。批次#2 可以比批次#1 有更多的记录或更少的记录,这就是为什么我认为我需要在插入批次#2 之前删除批次#1 的所有记录。
【问题讨论】:
-
您可以删除表上
before insert触发器中的行。此外,您确实需要for each row,因为您需要检查每个插入的邮政编码。 -
如果已经存在具有相同
postal_code的记录怎么办?应该删除它们并插入新记录,还是新插入失败并保持旧记录完好无损? -
应删除之前批量插入过程中具有相同邮政编码的所有记录。例如:我在 2014 年 1 月 1 日插入了带有邮政编码“90210”的批次 #1,现在我有一个具有相同邮政编码的批次 #2,要在 2014 年 1 月 31 日插入。批次#1 中的所有记录都应删除,批次#2 中的所有记录应插入数据库
标签: database postgresql triggers sql-insert sql-delete