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)
希望有人有时间帮助欢呼
首先,您需要创建一个触发器功能.(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上修改了我自己的触发器
| 归档时间: |
|
| 查看次数: |
6629 次 |
| 最近记录: |