postgres now():它能成为过去吗?

2w3kk1z5  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(354)

假设我有一个专栏 last_updated 总是充满了 NOW() . 从其他连接的Angular 保证一行不会被设置为过去的值?例如,假设我有一个查询

SELECT * FROM my_table
WHERE last_updated < NOW()

返回一行 last_updated 对应 10:10:10 . 这是否意味着不可能在另一行中添加 last_updated 对应 10:10:09 ? 如果在某些情况下可能发生这种情况,是否有办法使其不可能/减轻风险?
上下文:用作最新更新的轮询目标的http端点。它取决于一个属性,在该属性中,查询返回的行是否具有特定的 last_updated 为了确保更新不会丢失,其他更改必须有自己的版本 last_updated 一次又一次,所有的人都回来了。
实际的查询如下所示。如果投票结果中的最后一项 last_updated 的时间戳 1575452913 ,和 id123 ,然后下一次投票将执行以下操作。

SELECT * FROM my_table
WHERE (last_updated, id) > (1575452913, 123) AND last_updated < EXTRACT(EPOCH FROM NOW())
ORDER BY (last_updated, id)
LIMIT 500

这个 > 在上面的例子中,是比赛条件的所在。如果行中添加了 last_updated 以前的 1575452913 ,那么它们将被错过。
我想我想要的是 NOW() ,返回最早的函数 NOW() 所有未结交易的时间?

last_updated < EARLIEST_NOW_OF_OPEN_TRANSACTIONS()

我意识到这和https://timerwich.com/posts/2018/01/29/monotonically-increasing-ids-in-postgres/. 他们想要保证id单调递增,我想要相同的,但是有时间戳。啊:我现在明白了https://github.com/cockroachdb/cockroach/issues/9227 它讨论了类似的问题,尽管是针对不同的数据库。

ukdjmx9f

ukdjmx9f1#

NOW() 返回当前事务的开始日期。所以如果另一个交易更早开始, NOW() 可以返回更早的日期。
你可以用 clock_timestamp() .
详见日期/时间函数。

相关问题