在插入触发器上从其他 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
上修改了我自己的触发器
我对 PostgreSQL 还很陌生,已经花了太多时间试图找到一个例子来适应我想做的事情。所以我希望能在这里得到一些帮助
我有2个table,称他们为人和地址
我想创建一个触发器,当我在第一个 table 中插入 person_id 的新值时,从 table 地址复制街道和 house_nr,其中 person_id = oid
Table person
person_id
street
house_nr
other_attributesTable 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
上修改了我自己的触发器