私の問題は次のとおりです。私はpostgresqlデータベースに行を挿入または更新し、この行の1つのフィールドを変更する必要があります。しかし、新しい行を挿入してSELECT
をJOIN
とすると、新しいシリアルPKを知る必要があります。トリガーで新しく作成された行の値を更新する
新しいPK(kkw_block_id
)を取得するためにAFTER INSERT AND UPDATE
トリガーを実行したため、今は固執しています。 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$
ご存じですか?