now()默认值都显示相同的时间戳

时间:2012-08-31 13:53:32

标签: postgresql transactions timestamp postgresql-9.1

我创建了一个包含列的表(类型:timestamp with timezone),并将其默认值设置为now()current_timestamp())。

我在单个函数中的单独语句中运行了一系列插入,我注意到所有时间戳都等于(ms),函数值是否以某种方式缓存并共享整个函数调用或事务?

2 个答案:

答案 0 :(得分:47)

那是expected and documented行为:

从手册:

  

由于这些函数返回当前事务的开始时间,因此它们的值在事务期间不会更改。这被认为是一个特征:目的是允许单个事务具有“当前”时间的一致概念,以便同一事务中的多个修改具有相同的时间戳。

如果您希望每次运行语句时都有更改,则需要使用statement_timestamp()甚至clock_timestamp()(再次参阅手册中的说明)

答案 1 :(得分:13)

now()current_timestampSTABLE函数,用于在事务开始时返回时间戳。

考虑其中一个other options PostgreSQL offers,特别是 statement_timestamp() Per documentation

  

statement_timestamp()返回当前语句的开始时间(更具体地说,是从客户端收到最新命令消息的时间)