我对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
希望有人有时间提供帮助 欢呼声
答案 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上修改了我自己的触发器