postgresql 我是否可以使用事务来确保使用OFFSET和LIMIT对重复SELECT的记录进行一致的遍历?

qjp7pelc  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(124)

我有一个每天运行一次的计划作业,在多个API之间同步实体。我正在寻找一种可靠的方法,使用LIMITOFFSET从我的数据库中提取“页面”数据,而不需要一次性下载GB的数据。
据我所知,在进程开始时启动事务并在其中重复执行SELECT,将确保结果集中没有记录由于其他并发进程而被添加或跳过。
希望这能让我在事务开始时对数据库记录的确切状态执行同步作业,而且,值得知道的是,同步作业本身不会改变上述结果集中的记录。

umuewwlo

umuewwlo1#

正如Burak塞尔达尔和Frank Heikens所指出的,可重复的读隔离级别是一种解决方案,可以通过使用所需选项(使用sqlx)启动事务来轻松实现:

tx, err := DB.BeginTxx(ctx, &sql.TxOptions{
    Isolation: sql.LevelRepeatableRead,
    ReadOnly:  true,
})

相关问题