我正在研究一个postgres系统,其中包含10或100百万行的表格,并以每秒几行的速度进行馈送。
我需要对这些表的行进行一些处理,所以我打算运行一些简单的select查询:select * with where子句基于一个范围(每行包含一个时间戳,这就是我将使用的对于范围)。它可能是一个“封闭范围”,我知道开始和结束都包含在表格中,我知道没有新数据会落入范围或开放范围:即其中一个范围边界可能不是“在表中“并且表格中的行可能因此落在该范围内。
由于响应本身包含数百万行,并且每行处理可能需要一些时间(10秒)我完全知道我将使用游标并一次取几行1000 。我的问题是:
如果我运行“开放范围”查询:我是否只获得结果,就像我开始查询时一样,或者当我运行我的fetch显示时,是否会在表中插入新行?
(我倾向于认为不,我不会看到新行,但我想要确认......)
答案 0 :(得分:1)
<强>更新强>
不应该在任何隔离级别下发生:
https://www.postgresql.org/docs/current/static/transaction-iso.html
但Postgres仅在可序列化隔离
中进行保险答案 1 :(得分:0)
好吧,我认为当您进行查询时,这意味着您创建了一个新事务,并且在提交之前它不会从任何其他事务接收/更新数据。
所以,基本上&#34;你只得到你开始查询时的结果&#34;