在插入触发器上从其他 table 复制值,postgres

Copy value from other table on insert trigger, postgres

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

我有2个table,称他们为人和地址

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

Table person
person_id
street
house_nr
other_attributes

Table Address
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

希望有人有时间帮忙 干杯

首先你需要创建一个触发函数。 (有关 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;

那么您需要将此功能添加到table。 (有关 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

上修改了我自己的触发器