带有 OFFSET 的 PostgreSQL LIMIT 无法超过 100000

Suv*_*osh 2 sql database postgresql pagination offset

我在我的项目中使用 postgres (9.6) docker。加载大量数据(例如 234453)后,我需要使用 limit 和 offset 将数据切成块。但我观察到我的查询在超出 100000 的限制时被挂起。就像当我给出限制 100000 时我可以削减一样。但是当我使用 120000 时,它就挂起了。

加载的数据:234453行查询:这正在工作:docker exec -it pg_1 psql -P pager postgres postgres -t -c“从schema1.table1删除其中col_id不在(从schema1.table1限制100000偏移1中选择col_id)”

这是挂起的: docker exec -it pg_1 psql -P pager postgres postgres -t -c "delete from schema1.table1 where col_id not in (select col_id from schema1.table1 limit 120000 offset 1)"

下一次削减应该是从 100001 到 230000,类似的事情。

你能告诉我,我该怎么做吗?或者我是否做错了什么?

谢谢,苏文杜

Vla*_*cea 5

Offset PaginationOFFSET仅当该值相对较小时才有效。

否则,即使您对排序和过滤条件建立了索引,数据库也必须扫描索引并对条目进行计数,直到达到正确的OFFSET值。对于非常大的值,这意味着索引几乎被完全扫描。

所以,你最好使用Keyset Pagination.