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

时间:2015-04-28 07:35:45

标签: postgresql triggers

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

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

我想创建一个触发器,当我在person_id = oid

的第一个表中为person_id插入新值时,从表地址复制street和house_nr
  

表人士   为person_id
  街道
  house_nr
  other_attributes

     

表地址
  OID
  街道
  house_nr
  other_attributes

像这样的东西

INSERT INTO person
set person.street = address.street,
    person.house_nr = address.house_nr
FROM address
WHERE person_id = oid

希望有人有时间提供帮助 欢呼声

1 个答案:

答案 0 :(得分: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;

然后您需要将此功能添加到表中。 (关于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();

我没有尝试这个特定的解决方案。不管它应该有用,我只是在Postgres 9.3上修改了我自己的触发器