假如我有一列 last_updated
始终充满了 NOW()
. 从其他连接的角度来看,是否可以保证某行不会被设置为过去的值?例如,我有一个查询
SELECT * FROM my_table
WHERE last_updated < NOW()
的单行,返回一个带有 last_updated
与...相对应 10:10:10
. 这是否意味着不可能再用 last_updated
与...相对应 10:10:09
? 如果在某些情况下会发生,有没有办法让它不可能减轻风险?
Context: 一个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.composts20180129monotonically-increasing-ids-in-postgres。. 他们要保证单调增加的ID,而我要同样的,但要有时间戳。啊:我现在明白了 https:/github.comcockroachdbcockroachissues9227。 其中讨论了类似的问题,尽管是针对不同的数据库。