我的问题如下:我插入或更新postgresql数据库中的一行,并需要修改此行中的一个字段。但我需要知道新的串行PK,当我插入一个新行,使SELECT
与JOIN
在其他表上。使用触发器更新新创建的行值
我现在陷入困境,因为我已经做了AFTER INSERT AND UPDATE
触发器来获得新的PK(kkw_block_id
)。我用SELECT
得到了我需要的值,但之后我无法修改该行中的值:修改NEW.value不可能,因为AFTER INSERT AND UPDATE
,如果我在该行上做了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$
任何想法?