Postgresql 在Postgres中使用触发器对更新进行排序和时间戳
我试图在更新表中的时间戳行和版本行时对它们进行更新。我有以下跳跳虎:Postgresql 在Postgres中使用触发器对更新进行排序和时间戳,postgresql,triggers,database-trigger,Postgresql,Triggers,Database Trigger,我试图在更新表中的时间戳行和版本行时对它们进行更新。我有以下跳跳虎: CREATE OR REPLACE FUNCTION trigger_set_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); NEW.version = OLD.version + 1; RETURN NEW; END; $$
CREATE OR REPLACE FUNCTION trigger_set_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
NEW.version = OLD.version + 1;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
我将其添加到我的表中,如下所示:
CREATE TRIGGER exchange_order_trigger_1 BEFORE UPDATE ON exchange_order
FOR EACH ROW EXECUTE PROCEDURE trigger_set_timestamp();
我有第二个触发器,它使用执行pg_notify('table_watch',textPayload')
通过将更改作为json字符串发送到行中来通知my nodejs应用程序。nodejs应用程序只是将每一行记录到控制台
我认为它工作得很好,但我注意到时间戳和版本号并没有逐步增加。以下是输出示例(按接收顺序):
如您所见,版本号按预期增加,但时间戳没有增加。例如,版本4时间戳早于版本3时间戳
当我查看行中的其他数据时,看起来更新的_at值是正确的,而版本是错误的
我做错了什么?非常感谢您的帮助
使用谷歌云平台托管的Postgres 9.6实例你可能想要
clock\u timestamp()
而不是now()
谢谢,我会试试的。
"updated_at":"2020-07-16T06:43:40.234227+00:00","version":1
"updated_at":"2020-07-16T06:43:41.170334+00:00","version":2
"updated_at":"2020-07-16T06:43:50.930157+00:00","version":3
"updated_at":"2020-07-16T06:43:46.528429+00:00","version":4
"updated_at":"2020-07-16T06:43:51.717432+00:00","version":5
"updated_at":"2020-07-16T06:43:48.300129+00:00","version":6
"updated_at":"2020-07-16T06:43:53.103254+00:00","version":7