【发布时间】:2017-06-21 01:49:48
【问题描述】:
每次在表 knowledgebase_messages 上插入或更新记录时,我都想运行一个触发器,这将使用该消息的 locale_id 连接的 pg_language_dictionary(例如:“French”)向量化 message 列。
目前,触发器在行更新,但不是初始插入。意思是,如果我插入一行,然后运行查询以获取记录,以任何方式更新行,或刷新 postgres UI,我会在那里正确地看到矢量化值。
触发功能:
runMessageVectorTriggerFn = 'CREATE OR REPLACE FUNCTION run_message_vector() ' +
'RETURNS TRIGGER ' +
'AS $BODY$ ' +
'BEGIN ' +
'IF pg_trigger_depth() <> 1 THEN ' +
'RETURN NEW; ' +
'END IF; ' +
'UPDATE knowledgebase_messages kbm ' +
'SET vector = to_tsvector(lang.pg_dictionary_name::regconfig, kbm.message) ' +
'FROM locales as loca ' +
'JOIN languages as lang ON loca.language_id = lang.id ' +
'WHERE kbm.locale_id = loca.id;' +
'RETURN NEW; ' +
'END; ' +
'$BODY$ LANGUAGE plpgsql';
触发器:
runMessageVectorTrigger = 'CREATE TRIGGER run_message_vector AFTER INSERT OR UPDATE ON knowledgebase_messages ' +
'FOR EACH ROW EXECUTE PROCEDURE run_message_vector()';
【问题讨论】:
标签: postgresql triggers