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

Rya*_*sch 30 postgresql timestamp transactions postgresql-9.1

我用列创建了表(类型:timestamp with timezone)并将其默认值设置为now()(current_timestamp()).

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

a_h*_*ame 47

这是预期和记录的行为:

从手册:

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

如果您想要在每次运行语句时更改某些内容,则需要使用statement_timestamp()或甚至clock_timestamp()(再次参阅手册中的说明)


Erw*_*ter 13

now()或者current_timestampSTABLE事务开始时返回时间戳的函数.

考虑一下PostgreSQL提供其他选项之一statement_timestamp().
每个文件:

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