31

我用一列(类型:带时区的时间戳)创建了我的表,并将其默认值设置为now()current_timestamp())。

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

4

2 回答 2

49

这是预期和记录的行为:

从手册:

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

如果您希望每次运行语句时都会更改某些内容,则需要使用statement_timestamp()or 甚至clock_timestamp()(再次参见手册中的描述)

于 2012-08-31T14:05:36.137 回答
13

now()并且current_timestampSTABLE返回事务开始时的时间点的函数timestamptz

尤其考虑PostgreSQL 提供的其他选项statement_timestamp()之一。手册:

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

于 2012-08-31T14:05:12.987 回答