我在postgres数据库中有一个函数,它进行了大量的分析;它由一系列update和insert语句组成,并最终抛出一些输出。我想找出哪些语句执行得很慢,而不需要查看日志文件。(与perl相比,我更习惯于使用SQL编写日期/时间算术查询,以便发现问题。)
我有张桌子,activity_log:
CREATE TABLE activity_log
(
action character varying(250),
action_date date,
action_tune time without time zone
);然后在我的整个函数中,每次插入/更新之后,我都会编写如下语句
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'INSERT to base_model');这个函数看起来是这样的:
CREATE FUNCTION rebucket(pos_control character varying, absolute_max_cpc numeric, absolute_max_bucket character varying)
RETURNS integer AS
$BODY$
DECLARE qty INT;
BEGIN
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'Off we go');
-- Do something that takes 5 minutes
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'INSERT to base_model');
-- Then do something else that also takes about 5 minutes ...
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'INSERT to diagnostics');
END
$BODY$
LANGUAGE plpgsql VOLATILE过去,我在其他数据库中使用过这种方法,但是当我在Postgres (Windows7上的9.1)中尝试这种方法时,每当我运行整个函数时,activity_log中的日期和时间对于函数中的每个语句都是完全相同的:在上面的例子中,
SELECT * FROM activity_log让我
Off we go 2013-05-13 12:33:23:386
INSERT to base_model 2013-05-13 12:33:23:386
INSERT to diagnostics 2013-05-13 12:33:23:386(该函数的运行时间从5分钟到一个小时不等,这取决于我们为其提供的参数,并且函数中有超过20个不同的语句,因此似乎很难在相同的1/100秒内完成所有语句。)
为什么会这样呢?
发布于 2013-05-14 08:23:30
您使用的时间戳总是给出当前事务的开始。如果您查看手册,您将看到您想要clock_timestamp()。
https://stackoverflow.com/questions/16537201
复制相似问题