Эквивалент функции FOUND_ROWS() в Postgresql

Я выполняю подкачку в своем приложении, возвращая 20 строк из базы данных за один раз с использованием стандартных слов PostgreSQL OFFSET и LIMIT. Например, чтобы получить страницу 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?

Ответ 1

PostgreSQL теперь функции окна теперь может использоваться для выполнения многих задач, включая подсчет строк до применения LIMIT.

На основании приведенного выше примера:

SELECT stuff,
       count(*) OVER() AS total_count
FROM table
WHERE condition
ORDER BY stuff OFFSET 40 LIMIT 20