如何在PostgreSQL触发器函数中修改NEW记录关联模型名称
解决PostgreSQL触发器通知返回关联表model_name的问题
修改触发器函数实现关联查询
原来的触发器函数仅返回overrides表的新记录数据,现在需要在函数内部关联models表获取对应的model_name,再构造包含该字段的JSON发送通知。
具体SQL代码
CREATE OR REPLACE FUNCTION NotifyOnDataChange() RETURNS TRIGGER AS $$ DECLARE v_model_name models.Model_name%TYPE; BEGIN -- 根据新插入记录的model_id查询对应model_name SELECT Model_name INTO v_model_name FROM models WHERE id = NEW.model_id; -- 构造包含model_name的通知JSON(可按需保留model_id) PERFORM pg_notify('datachange', json_build_object( 'id', NEW.id, 'value', NEW.value, 'model_name', v_model_name -- 若需要保留model_id,添加:'model_id', NEW.model_id )::TEXT); RETURN NEW; END; $$ LANGUAGE plpgsql;
可选处理:避免model_name为NULL
如果overrides表的model_id没有外键约束,可能存在关联不到models记录的情况,可通过COALESCE设置默认值:
SELECT COALESCE(Model_name, '未找到对应模型') INTO v_model_name FROM models WHERE id = NEW.model_id;
生效说明
修改完触发器函数后,无需调整已创建的触发器(因为触发器是调用该函数执行逻辑)。后续新增overrides记录时,datachange通道的通知消息会直接包含model_name字段,你的.NET应用可以直接解析使用,无需再二次查询数据库。
内容的提问来源于stack exchange,提问作者Farshid
相关产品推荐
相关产品推荐

