postgresql 9.1数据库写入从机器自动发送的数据。这工作正常。postgresql触发功能 - 重复或缺少数据
我有一个AFTER INSERT ... FOR EACH ROW触发器 - 这也适用。 触发器通过查看另一个表以及它触发的字段中是否有值。
我有两个问题 - a。有些机器发送的结果不止一个。我使用LIMIT 1来防止重复,这意味着我错过了发送多个结果的机器的数据。什么是替代这个? b。有些机器共享相同的测试代码,我无法找到一种合格的方法,以便在使用NEW值时使它在SELECT中成为特定机器。这里是代码
CREATE FUNCTION testcode_matches()
RETURNS TRIGGER as $$
DECLARE
var INTEGER;
name text;
short text;
id integer;
BEGIN
SELECT count("TestID") from testcode WHERE "testcode"."Parameter" = NEW."Parameter" into var;
IF var > 0 THEN
SELECT "TestName", "ShortTestName", "TestID"
from testcode where "Parameter" = NEW."Parameter" Limit 1 into name, short, id;
INSERT INTO finaldata /* various fields */
SELECT /* various fields */ name, short, id
from obx
WHERE "obx"."Parameter" = NEW."Parameter"
LIMIT 1;
END if;
RETURN NEW;
END;
$$ language plpgsql;
你从'从testcode其中 “参数”= NEW “参数”'查询期待不止一个ID?在这种情况下:限制1;导致一个随机的id被检索(并插入finaldata)。恕我直言,你可以把所有{testcode,obx}放入子查询中,并省略所有变量。该查询将成为纯SQL。 ASO:你能添加表格定义和触发器吗? – wildplasser 2012-03-08 14:30:53
我收到了另一个答案,下面的答案帮了我,但我对学习子查询感兴趣。你能建议一个链接让我看看吗?触发器本身是 - 表“公共”的触发器结构。“obx” - ---------------------------- CREATE TRIGGER“finaldata_matches”AFTER INSERT ON“public”。“obx” FOR EACH ROW EXECUTE PROCEDURE“testcode_matches”(); – user1044111 2012-03-09 15:12:30