记录到函数中的日志表会显示其中所有操作的相同时间,尽管它们相隔几分钟

时间:2012-09-06 04:33:42

标签: postgresql plpgsql

我的函数写入带有timestamp default current_timestamp字段的日志表。我的问题是来自函数运行的所有日志总是获得相同的时间戳,即使实际上是运行开始和运行结束时的日志,它们至少相隔几分钟。

我不知道是否重要但是写入日志表是通过另一个函数write_to_log完成的。

如何让日志写入显示实时而不是(我猜)交易时间?

2 个答案:

答案 0 :(得分:4)

您将需要statement_timestamp()clock_timestamp()函数之一,这些函数确实是PostgreSQL扩展。这些可以在交易期间发生变化。

另见乔纳森的回答和文档:

http://www.postgresql.org/docs/9.1/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT

答案 1 :(得分:3)

SQL标准要求数据库服务器维护SQL语句即时执行的虚构。因此,在语句运行时,时间被冻结。通常,您会发现确实提供(实际的,非冻结的)当前时间的非标准函数,但标准定义的核心函数(CURRENT_TIMESTAMP,CURRENT_TIME)不允许更改声明正在执行。