Mystical postgresql query timing issue [重复]

pzfprimi  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(70)

此问题在此处已有答案

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表的时间戳。

brgchamk

brgchamk1#

正如你在now()文档中所读到的:
这些SQL标准函数都基于当前事务的开始时间返回值:
因此,如果您将插入作为单个事务的一部分进行,则它们都将获得相同的时间戳。
用于连接Postgres的库可能会有令人惊讶的事务模式。例如,每当您运行insert语句时,Python的psycopg2都会隐式启动一个事务。

相关问题