当然,触发器会带来一些开销,但通常可以忽略不计。(c#选项也会有轻微的代码开销和轻微的网络开销,所以可能是一个折腾)。这在一定程度上取决于你对“每天交易量巨大”的定义。是每天1000次交易中的10次还是每秒1000次交易中的10次。通常情况下,庞大的数字相对较小。唯一确定的方法是测试它(确保捕获总运行时间,而不仅仅是数据库中的时间)。
Postgres中的触发器语法与MySql有很大不同。在Postgres中创建一个特殊类型的函数(返回触发器)。触发器本身是一条语句,即execute函数。使用MySql时,代码直接位于触发器定义中(就像Oracle一样——事实上,在Oracle购买MySql之前,MySql不支持触发器)这里的优点是,任何实现相同列名的表(至少在本例中)都可以使用该函数。
create or replace
function set_updated_timestamp()
returns trigger
language plpgsql
as $$
begin
new.updated = now();
return new;
end;
$$;
看见
fiddle
举个完整的例子。注:Postgres 9.4版
不再支持
,我建议尽快更新。对于fiddle,我使用了9.5版,因为它是最古老的版本。此外,如果fiddle运行缓慢,则是由于“select sleep”(选择睡眠)语句,而不是触发器。我不认为“db<>fiddle”实际上尊重这些说法。