此问题在此处已有答案:
now() default values are all showing same timestamp(2个答案)
Custom utc now date function returns same result(1个答案)
How to get a real time within PostgreSQL transaction?(3个答案)
Postgres now() timestamp doesn't change, when script works(1个回答)
20天前关闭。
我尝试使用这个函数在postgresql中记录事件:
CREATE OR REPLACE PROCEDURE admin.log_event(
IN log_message character varying,
IN param1 character varying DEFAULT NULL::character varying,
IN param2 character varying DEFAULT NULL::character varying)
LANGUAGE 'plpgsql'
AS $BODY$
declare ts timestamp;
begin
ts = now();
insert into admin.event_log (dt, msg, param_1, param_2) values (ts, log_message, param1, param2);
end;
$BODY$;
字符串
使用模式为:
- 日志事件
- 运行查询几分钟
- 日志事件
- ...
我在event_log表中看到的是,一个持续35分钟的查询批处理的所有24个条目都记录了相同的时间戳,即批处理开始的时间。
很明显,我不理解postgresql的insert语句,因为我希望每行都能反映出插入request_log表的时间戳。
1条答案
按热度按时间brgchamk1#
正如你在
now()
文档中所读到的:这些SQL标准函数都基于当前事务的开始时间返回值:
因此,如果您将插入作为单个事务的一部分进行,则它们都将获得相同的时间戳。
用于连接Postgres的库可能会有令人惊讶的事务模式。例如,每当您运行
insert
语句时,Python的psycopg2都会隐式启动一个事务。