长时间运行的查询和新数据

时间:2018-01-24 08:47:46

标签: postgresql

我正在研究一个postgres系统,其中包含10或100百万行的表格,并以每秒几行的速度进行馈送。

我需要对这些表的行进行一些处理,所以我打算运行一些简单的select查询:select * with where子句基于一个范围(每行包含一个时间戳,这就是我将使用的对于范围)。它可能是一个“封闭范围”,我知道开始和结束都包含在表格中,我知道没有新数据会落入范围或开放范围:即其中一个范围边界可能不是“在表中“并且表格中的行可能因此落在该范围内。

由于响应本身包含数百万行,并且每行处理可能需要一些时间(10秒)我完全知道我将使用游标并一次取几行1000 。我的问题是:

如果我运行“开放范围”查询:我是否只获得结果,就像我开始查询时一样,或者当我运行我的fetch显示时,是否会在表中插入新行?

(我倾向于认为不,我不会看到新行,但我想要确认......)

2 个答案:

答案 0 :(得分:1)

<强>更新

不应该在任何隔离级别下发生:

https://www.postgresql.org/docs/current/static/transaction-iso.html

但Postgres仅在可序列化隔离

中进行保险

enter image description here

答案 1 :(得分:0)

好吧,我认为当您进行查询时,这意味着您创建了一个新事务,并且在提交之前它不会从任何其他事务接收/更新数据。

所以,基本上&#34;你只得到你开始查询时的结果&#34;