decade-old StackOverflow question分的答案对我很有帮助.然而,我无法用"标准"SQL编写等价的函数和触发器,即language参数指定sql而不是plpgsql.问题似乎是用标准SQL编写的函数不能返回触发器,尽管这似乎是PostgreSQL中触发器调用的函数所必需的:

触发器函数必须声明为不带参数并返回类型触发器的函数.

所以try ...

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重写original SO answer中特定于PostgreSQL的函数和触发器?

推荐答案

特定于PostgreSQL的函数如何[...]用"标准"的SQL重写?

这不可能.The manual:

触发器函数可以用大多数可用的过程编写 语言[...]

也可以用C语言编写触发器函数,尽管大多数 人们发现使用其中一种过程性语言更容易.它是 not currently possible to write a trigger function in the plain SQL function language.

大胆强调我的观点.

我已经编写了数千个触发器函数.几乎所有的人都有LANGUAGE plpgsql人.

相关:

Sql相关问答推荐

使用自动增量ID插入失败(无法将值空插入列ID)

如何在Presto中将多个列合并到一个数组中

SQL:计算与另一列中给定值互斥的匹配项

SQL子查询返回多个值错误

DBeaver将过程中的属性列表转换为字符串

找到最新的连线

正在编写查询.我需要将订阅的时间段分为第一个订阅中包含的另一个订阅之前和之后的时间段

Select 列组(按同一表格中的另一列分组)Laravel 10

在Power Bi中将SQL代码转换为DAX

将时间范围划分为全天和前后剩余小时

更改重复值的情况

对现有记录进行分组

具有分组条件的不同计数 (DAX)

如何将 START 和 END 日期之间的日期差异作为 SQL 中的单独列获取

汇总具有连续日期范围的行

获取所有用户的第一次和最后一次发货以及到达日期

如何显示最常引用条目的详细信息

在 MS Access 中连接相关记录

在 Athena / Presto 中提取 JSON 对象以获取动态密钥

按 15 分钟递增计数分组,包括 0 计数