You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为event_entity表添加含details_json条件的通知触发器

问题描述

我有一个名为event_entity的事件实体表,表结构定义如下:

create table event_entity
(
    id           varchar(36) not null
        constraint constraint_4
            primary key,
    details_json varchar(2550),
    event_time   bigint,
    type         varchar(255),
    user_id      varchar(255)
);

其中details_json字段存储如下格式的JSON数据:

{
   "custom_required_action":"VERIFY_EMAIL"
}

我需要为该表创建插入触发器,当插入的行满足条件type = 'CUSTOM_REQUIRED_ACTION' AND details_json:custom_required_action = 'VERIFY_EMAIL'时发送通知。

目前我已编写了部分触发器代码:

CREATE OR REPLACE FUNCTION notify_verifyEmail()
    RETURNS trigger AS $$
DECLARE
BEGIN
    PERFORM pg_notify(
            'verifyEmail',
            row_to_json(NEW)::text);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER notify_verifyEmail
    AFTER INSERT ON event_entity
    FOR EACH ROW 
    WHEN (new.type = 'CUSTOM_REQUIRED_ACTION')
EXECUTE PROCEDURE notify_verifyEmail();

请问如何为该触发器添加details_json字段的判断条件?

解决方案

直接修改触发器的WHEN条件,加入对details_json字段的判断逻辑即可。由于details_json是varchar类型,需要先转为JSON类型再提取字段值进行比较:

CREATE OR REPLACE FUNCTION notify_verifyEmail()
    RETURNS trigger AS $$
DECLARE
BEGIN
    PERFORM pg_notify(
            'verifyEmail',
            row_to_json(NEW)::text);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER notify_verifyEmail
    AFTER INSERT ON event_entity
    FOR EACH ROW 
    WHEN (
        new.type = 'CUSTOM_REQUIRED_ACTION'
        AND (new.details_json::json ->> 'custom_required_action') = 'VERIFY_EMAIL'
    )
EXECUTE PROCEDURE notify_verifyEmail();

逻辑说明

  • new.details_json::json:把字符串格式的details_json转换为JSON类型,才能进行字段提取操作
  • ->>:该操作符用于提取JSON字段的文本值,提取后即可与'VERIFY_EMAIL'做等值判断

如果你的PostgreSQL版本支持jsonb类型,建议将details_json字段改为jsonb,这会提升JSON操作的性能,此时判断逻辑可以简化为:

AND (new.details_json ->> 'custom_required_action') = 'VERIFY_EMAIL'

内容的提问来源于stack exchange,提问作者hoozr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:50:21