Offset Pagination Count Window
Implement classic offset pagination with a single-pass window count, page metadata, and sane caps on depth and page size.
Code
-- 单次往返:数据页与总数用窗口函数一并取回
SELECT
id,
name,
email,
status,
COUNT(*) OVER () AS total_matching
FROM customers
WHERE status = 'active'
ORDER BY created_at DESC, id DESC
LIMIT 25 OFFSET 50;
-- 分页参数带硬上限(防恶意大页与深翻页)
-- 应用层生成的 SQL 遵循:
-- page_size <= 100
-- page_number * page_size <= 10000
SELECT id, name
FROM customers
ORDER BY id
LIMIT 100 OFFSET 0;
-- 跳转特定页(第 4 页,每页 25 条)
SELECT
id, name,
COUNT(*) OVER () AS total,
(COUNT(*) OVER () + 24) / 25 AS total_pages
FROM customers
ORDER BY id
LIMIT 25 OFFSET 75;Report a problem with this exampleOpens a pre-filled issue on GitHub.