问题
当使用数据库查询数据,并且返回的数据行数很多时,往往需要对数据进行分页(pagination),以便UI或者数据使用者进行处理。在PostgreSQL中,如何对数据进行分页呢?
解决方法
PostgreSQL提供了limit
和offset
,可以对数据进行分页。先简要说一下二者的含义。
-
limit n
当Select语句返回的数据行数大于n时,只返回n条数据。否则,返回实际的数据行数。 -
offset m
跳过前m条数据,然后返回相应的数据。如果与limit n
结合使用,则先跳过前m条数据,然后再返回n条数据(当数据行数>n)或者返回实际的数据行数。
将二者结合,就可以对数据进行分页处理了。
比如,数据表中有1000行顾客数据,对数据进行分页,每页100条数据。可以使用如下的SQL语句进行处理。当返回的数据条数 < limit时,说明是最后一页,没有新的数据了。
select
id,
name
from customer
offset $1 -- $1 分别为0, 100(limit), ..., x * limit
limit 100;