从插入触发器,postgres上的其他表复制值

geo*_*row 3 postgresql triggers

我对PostgreSQL很新,并且花了太多时间试图找到一个适应我想做的事情的例子.所以我希望我能在这里得到一些帮助

我有2张桌子,称他们为人和地址

我想创建一个触发器,当我在person_id = oid的第一个表中为person_id插入新值时,从表地址复制street和house_nr

表人
person_id
street
house_nr
other_attributes

表地址
oid
street
house_nr
other_attributes

像这样的东西

INSERT INTO person
set person.street = address.street,
    person.house_nr = address.house_nr
FROM address
WHERE person_id = oid
Run Code Online (Sandbox Code Playgroud)

希望有人有时间帮助欢呼

Nur*_*mir 9

首先,您需要创建一个触发器功能.(http://www.postgresql.org/docs/9.3/static/plpgsql-trigger.html上的详细信息)

CREATE OR REPLACE FUNCTION func_before_trigger_on_person()
  RETURNS trigger AS
$BODY$
BEGIN
    SELECT address.street, address.house_nr
        INTO NEW.street, NEW.house_nr
    FROM address
    WHERE address.oid = NEW.person_id;

    RETURN NEW;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
Run Code Online (Sandbox Code Playgroud)

然后,您需要将此功能添加到表中.(有关http://www.postgresql.org/docs/9.3/static/sql-createtrigger.html的详细信息)

CREATE TRIGGER before_trigger_on_person
  BEFORE INSERT OR UPDATE
  ON person
  FOR EACH ROW
  EXECUTE PROCEDURE func_before_trigger_on_person();
Run Code Online (Sandbox Code Playgroud)

我没有尝试这个具体的解决方案.但它应该工作,我只是在Postgres 9.3上修改了我自己的触发器