云环境无法安装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
相关产品推荐
相关产品推荐

