将触发器中创建的记录链接到触发源

时间:2014-09-28 12:01:37

标签: postgresql triggers

我有两个表,contactuserContact有一个名为user_id的字段,顾名思义,该字段存储属于该联系人的用户的ID。

user记录由contact上的插入前触发器创建。这很好用,但是我一直试图更新联系人的user_id字段。我试着这样做:

CREATE OR REPLACE FUNCTION create_user()
    RETURNS trigger AS
$BODY$
BEGIN
    NEW.user_id = INSERT INTO user(name)
        VALUES (NEW.name)
        RETURNING id;
    RETURN NEW;
END;
$BODY$ LANGUAGE PLPGSQL;

但它不起作用。

如何将新创建的记录链接到触发源?

1 个答案:

答案 0 :(得分:1)

您需要INTO子句,该子句是PL / pgSQL特定且与INSERT INTOSELECT INTO无关:

INSERT INTO user(name)
VALUES (NEW.name)
RETURNING id
INTO STRICT NEW.user_id;
如果没有插入一个结果,

INTO STRICT会导致它引发错误。