我正在我的应用程序中进行一些分页,使用 PostgreSQL 的标准 OFFSET 和 LIMIT 关键字一次从数据库返回 20 行。 例如,要获取第 1 页:
SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20
应用程序要求我们还向用户显示记录总数。 所以,显然,我可以通过发出单独的查询来获取总数:
SELECT COUNT(*) FROM table WHERE condition
但是如果有大量行,那么这不是最佳解决方案。 我注意到 MySQL 有一个非常有用的函数,称为 FOUND_ROWS(),它正是我正在寻找的:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows
PostgreSQL 中有等效的吗?
PostgreSQL 拥有窗口函数已经有一段时间了,它可以用来做很多事情,包括在应用 LIMIT 之前计算行数。
基于上面的例子:
SELECT stuff,
count(*) OVER() AS total_count
FROM table
WHERE condition
ORDER BY stuff OFFSET 40 LIMIT 20
SELECT
n_live_tup
FROM
pg_stat_user_tables
WHERE
relname = 'table_Name';