我创建了一个包含列的表(类型:timestamp with timezone),并将其默认值设置为now()
(current_timestamp()
)。
我在单个函数中的单独语句中运行了一系列插入,我注意到所有时间戳都等于(ms),函数值是否以某种方式缓存并共享整个函数调用或事务?
答案 0 :(得分:47)
从手册:
由于这些函数返回当前事务的开始时间,因此它们的值在事务期间不会更改。这被认为是一个特征:目的是允许单个事务具有“当前”时间的一致概念,以便同一事务中的多个修改具有相同的时间戳。
如果您希望每次运行语句时都有更改,则需要使用statement_timestamp()
甚至clock_timestamp()
(再次参阅手册中的说明)
答案 1 :(得分:13)
now()
或current_timestamp
是STABLE
函数,用于在事务开始时返回时间戳。
考虑其中一个other options PostgreSQL offers,特别是 statement_timestamp()
Per documentation:
statement_timestamp()
返回当前语句的开始时间(更具体地说,是从客户端收到最新命令消息的时间)