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

如何用标准SQL改写PostgreSQL中更新当前日期的触发器?

将PostgreSQL更新时间触发器改写为标准SQL版本

问题背景

十年前StackOverflow上一则关于PostgreSQL更新当前日期触发器的回答对我有所帮助,但我无法写出等价的标准SQL函数和触发器——即language参数指定为sql而非plpgsql的版本。问题在于标准SQL编写的函数无法返回trigger类型,而PostgreSQL要求触发器函数必须声明为无参数且返回trigger类型:

触发器函数必须声明为无参数且返回trigger类型。

尝试执行以下代码:

create function func_dummy()
returns trigger as
'update tbl_dummy
set update_date = current_timestamp;'
language sql;

得到报错:

ERROR:  SQL functions cannot return type trigger
SQL state: 42P13

解决方案

标准SQL的触发器体系不需要单独定义返回trigger类型的函数,可以直接在触发器定义中嵌入字段更新逻辑,完全绕过PostgreSQL的SQL函数限制。

标准SQL实现代码

直接创建BEFORE UPDATE触发器,在触发时自动更新目标字段:

CREATE TRIGGER trigger_dummy_update_date
BEFORE UPDATE ON tbl_dummy
FOR EACH ROW
SET update_date = CURRENT_TIMESTAMP;

核心说明

  • 该写法严格遵循SQL标准,无需依赖PostgreSQL特有的PL/pgSQL或SQL函数。
  • 触发器会在每一行数据执行更新操作前,自动将update_date字段设为当前时间戳,实现与原PostgreSQL触发器完全一致的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:12