我用一列(类型:带时区的时间戳)创建了我的表,并将其默认值设置为now()
(current_timestamp()
)。
我在单个函数的单独语句中运行了一系列插入,我注意到所有时间戳都等于(ms),函数值是否以某种方式缓存并为整个函数调用或事务共享?
我用一列(类型:带时区的时间戳)创建了我的表,并将其默认值设置为now()
(current_timestamp()
)。
我在单个函数的单独语句中运行了一系列插入,我注意到所有时间戳都等于(ms),函数值是否以某种方式缓存并为整个函数调用或事务共享?
这是预期和记录的行为:
从手册:
由于这些函数返回当前事务的开始时间,因此它们的值在事务期间不会改变。这被认为是一个特性:目的是允许单个事务具有一致的“当前”时间概念,以便同一事务中的多个修改具有相同的时间戳。
如果您希望每次运行语句时都会更改某些内容,则需要使用statement_timestamp()
or 甚至clock_timestamp()
(再次参见手册中的描述)
now()
并且current_timestamp
是STABLE
返回事务开始时的时间点的函数timestamptz
。
尤其考虑PostgreSQL 提供的其他选项statement_timestamp()
之一。手册:
statement_timestamp()
返回当前语句的开始时间(更具体地说,是从客户端收到最新命令消息的时间)