【发布时间】:2017-08-03 10:21:53
【问题描述】:
我的问题如下:我在postgresql数据库中插入或更新一行,需要修改这一行中的一个字段。但是当我插入新行以在其他表上创建SELECT 和JOIN 时,我需要知道新的串行PK。
我现在卡住了,因为我已经完成了 AFTER INSERT AND UPDATE 触发器来获取新的 PK (kkw_block_id)。我通过SELECT 获得了我需要的值,但之后我无法修改行中的值:使用AFTER INSERT AND UPDATE 修改 NEW.value 是不可能的,如果我在行上执行UPDATE,我进入一个无限循环,在触发器中调用触发器...
CREATE TRIGGER tsvectorupdate
AFTER INSERT OR UPDATE
ON kkw_block
FOR EACH ROW
EXECUTE PROCEDURE kkw_search_trigger();
CREATE OR REPLACE FUNCTION kkw_search_trigger()
RETURNS trigger AS
$BODY$
DECLARE vector_en TEXT;
DECLARE vector_fr TEXT;
DECLARE vector_de TEXT;
BEGIN
-- I need the new serial PK(kkw_id) in the following section.
SELECT coalesce(modell_en, '') || ', ' || coalesce(bezeichnung_en,'') || ', ' || coalesce(kkw.kkw_name_en,'') || ', ' || coalesce(kkw_typ.typ_abr,'') || ', ' || coalesce(kkw_typ.typ_desc_en,'') || ', ' || coalesce(kkw_typ.typ_desc_short_en,'') INTO vector_en
FROM kkw_block
LEFT JOIN kkw ON NEW.kkw_id = kkw.kkw_id
LEFT JOIN kkw_typ ON NEW.kkw_typ_id = kkw_typ.kkw_typ_id
WHERE kkw_block_id = NEW.kkw_block_id;
-- I need to update a field of the newly created or updated row.
NEW.search_vector_en := to_tsvector('english', 'new test vector'); --- This doesn't work with 'AFTER UPDATE' trigger.
RETURN NULL;
END
$BODY$
有什么想法吗?
【问题讨论】:
标签: postgresql triggers sql-update