Postgresql 在pgAdminIII中获取函数计时
我想比较pgAdmin的SQL编辑器中的两个函数。这是剧本。但是,当我运行它时,无论迭代多少次,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,但其命名是为了清楚地反映
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
$$