gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:38:42 25 4
gpt4 key购买 nike

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

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

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

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;

然后你需要把这个函数添加到表中。 (详细信息在 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 上修改了我自己的触发器

关于postgresql - 从插入触发器,postgres 上的其他表复制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com