Как вернуть количество записей в PostgreSQL - PullRequest
1 голос
/ 25 августа 2011

У меня есть запрос с ограничением и смещением. Например:

select * from tbl
limit 10 offset 100;

Как отслеживать количество записей без выполнения второго запроса, например:

select count(*) from tbl;

Я думаю это отвечает на мой вопрос, но мне это нужно для PostgreSQL. Есть идеи?

Ответы [ 3 ]

4 голосов
/ 25 августа 2011

Я нашел решение и хочу поделиться им.Что я делаю - я создаю временную таблицу из моей реальной таблицы с примененными фильтрами, затем выбираю из временной таблицы предел и смещение (без ограничений, поэтому производительность хорошая), затем выбираю count (*) извременная таблица (опять же без фильтров), затем другие вещи, которые мне нужны, и последнее - я удаляю временную таблицу.

select * into tmp_tbl from tbl where [limitations];
select * from tmp_tbl offset 10 limit 10;
select count(*) from tmp_tbl;
select other_stuff from tmp_tbl;
drop table tmp_tbl;
0 голосов
/ 20 декабря 2015

Зависит от того, нужен ли он из CLI psql, или если вы обращаетесь к базе данных с чего-то вроде HTTP-сервера. Я использую postgres с моего Node-сервера с node-postgres. Результирующий набор возвращается в виде массива с именем 'rows' в результирующем объекте, поэтому я могу просто сделать

console.log(results.rows.length)

Чтобы получить количество строк.

0 голосов
/ 25 августа 2011

Я не пробовал этого, но из раздела Obtaining the Result Status в документации вы можете использовать команду GET DIAGNOSTICS для определения эффекта команды.

GET DIAGNOSTICS number_of_rows = ROW_COUNT;

Из документации:

Эта команда позволяет получить индикаторы состояния системы.Каждый элемент - это ключевое слово, идентифицирующее значение состояния, которое должно быть назначено указанной переменной (который должен иметь правильный тип данных для его получения).В настоящее время доступны следующие элементы состояния: ROW_COUNT, число строк, обработанных последней командой SQL, отправленной в механизм SQL, и RESULT_OID, OID последней строки, вставленной самой последней командой SQL.Обратите внимание, что RESULT_OID полезен только после команды INSERT в таблицу, содержащую OID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...