假设我有一个专栏 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
,和 id
的 123
,然后下一次投票将执行以下操作。
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 它讨论了类似的问题,尽管是针对不同的数据库。
1条答案
按热度按时间ukdjmx9f1#
NOW()
返回当前事务的开始日期。所以如果另一个交易更早开始,NOW()
可以返回更早的日期。你可以用
clock_timestamp()
.详见日期/时间函数。