Postgresql 在pgAdminIII中获取函数计时

Postgresql 在pgAdminIII中获取函数计时,postgresql,pgadmin,Postgresql,Pgadmin,我想比较pgAdmin的SQL编辑器中的两个函数。这是剧本。但是,当我运行它时,无论迭代多少次,start\u time和end\u time似乎都具有相同的值。(但是,查询成功返回,没有产生nnn ms。消息确实会随着循环大小的增加而增加。)为什么 由于这些函数[当前\u时间戳、当前\u时间、当前\u日期]返回当前事务的开始时间,它们的值在事务期间不会更改 然后再往下走: transaction\u timestamp()相当于CURRENT\u timestamp,但其命名是为了清楚地反映

我想比较pgAdmin的SQL编辑器中的两个函数。这是剧本。但是,当我运行它时,无论迭代多少次,
start\u time
end\u time
似乎都具有相同的值。(但是,
查询成功返回,没有产生nnn ms。
消息确实会随着循环大小的增加而增加。)为什么

由于这些函数[当前\u时间戳、当前\u时间、当前\u日期]返回当前事务的开始时间,它们的值在事务期间不会更改

然后再往下走:

transaction\u timestamp()
相当于
CURRENT\u timestamp
,但其命名是为了清楚地反映它返回的内容
statement\u timestamp()
返回当前语句的开始时间(更具体地说,是从客户端接收最新命令消息的时间)<代码>语句\u timestamp()和
事务\u timestamp()
在事务的第一个命令期间返回相同的值,但在后续命令期间可能会有所不同
clock_timestamp()
返回实际的当前时间,因此即使在单个SQL命令中,其值也会发生变化


因此,您可能希望使用
clock\u timestamp()

和实际相关的位(来自同一文档链接):
now()
当前日期和时间(当前事务的开始)谢谢,我以为
now()
是现在。那么,在pgAdmin中,整个脚本都包装在一个事务中了?很高兴知道。
DO
$$
DECLARE
  start_time timestamp;
  end_time timestamp;
  diff interval;
BEGIN
 SELECT now() INTO start_time;
 FOR i IN 1..1000 LOOP
   --PERFORM uuid_generate_v1mc();
   PERFORM id_generator();
 END LOOP;
 SELECT now() INTO end_time;
 SELECT end_time - start_time INTO diff;
 RAISE NOTICE '%', start_time;
 RAISE NOTICE '%', end_time; 
 RAISE NOTICE '%', diff; 
END
$$