如何解决具有OFFSET的PostgreSQL LIMIT不能超过100000
我正在为我的项目使用postgres(9.6)泊坞窗。加载大量数据(例如234453)后,我需要使用限制和偏移量将数据切成块。但是我观察到我的查询已超出100000的限制。 就像我给100000限制时可以削减。但是当我使用120000时,它就挂了。
已加载数据:234453行 查询: 这正在工作: docker exec -it pg_1 psql -P pager postgres postgres -t -c“从schema1.table1删除,其中col_id不在(从schema1.table1选择col_id限制100000偏移量1)”
这被绞死了: docker exec -it pg_1 psql -P pager postgres postgres -t -c“从schema1.table1中删除,其中col_id不在(从schema1.table1中选择col_id,限制为120000偏移量1)”
下一个削减应该是从100001到230000,类似这样。
您能告诉我,我该怎么做?还是我做错了什么?
谢谢, Suvendu
解决方法
正如我在this article中所述,“偏移分页”仅在“偏移”值相对较小时才有效。
否则,即使您为排序和过滤条件建立索引,数据库也将必须扫描索引并对条目进行计数,直到达到正确的OFFSET值为止。对于非常大的值,这意味着将几乎完全扫描索引。
因此,最好使用Keyset Pagination。请查阅Markus Winand撰写的this article,以详细说明如何在PostgreSQL中实现键集分页。
,我已经尝试过 row_number() 并且它也适用于大量数据。 以下是我的查询:
docker exec -it pg_1 psql -P pager postgres postgres -t -c "delete from schema1.table1 WHERE col_id NOT IN (SELECT x.col_id FROM (select col_id,ROW_NUMBER () OVER (ORDER BY col_id) from schema1. table1) x WHERE ROW_NUMBER BETWEEN 100001 AND 230000)"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。