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

云环境无法安装moddatetime扩展,求纯PL/pgSQL替代触发器函数

纯PL/pgSQL实现moddatetime触发器函数

以下是替代官方moddatetime扩展的纯PL/pgSQL实现,功能与官方扩展完全一致:当触发UPDATE操作时,自动将指定列的值设置为当前时间戳。

CREATE OR REPLACE FUNCTION moddatetime()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
    colname text := TG_ARGV[0];
BEGIN
    -- 检查是否传入列名参数
    IF colname IS NULL THEN
        RAISE EXCEPTION 'moddatetime触发器必须指定目标列名';
    END IF;

    -- 动态设置目标列的当前时间戳
    EXECUTE format('SELECT CURRENT_TIMESTAMP INTO %I', colname) USING NEW;
    RETURN NEW;
END;
$$;

使用示例

假设你需要在users表更新时,自动更新updated_at列:

CREATE TRIGGER users_moddatetime
BEFORE UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION moddatetime('updated_at');

注意事项

  • 目标列的类型需为timestamp或timestamptz,否则会触发类型不匹配错误
  • 该函数会在每次UPDATE操作时强制覆盖目标列的值,无论该列是否被显式修改(与官方扩展行为一致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:22:02