Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

postgresql and number of rows

0 views
Skip to first unread message

Victor Wagner

unread,
Apr 12, 2002, 4:36:17 PM4/12/02
to
Kirill Petrov <KVPe...@valdosta.edu> wrote:

KP> Простой казалось бы вопрос,

KP> вот скажем сделал я селект на базе данных, как можно
KP> помотреть сколько строчек вернул это запрос? Интересует

Насколько я помню устройство libpq (а все прочие клиенты к postgres
делаются на ее базе) там результат запроса возвращается в виде некоторой
целой структуры данных, содержащих, помимо всего прочего и количество
строк в результате. То есть если всякие промежуточные уровни типа
ODBC нигде эту информацию не теряют, то спросить у рекордсета
сколько в нем строк должно быть просто бесплатно.

KP> исключительно постргерс. В микрософтовском вот например
KP> есть специальные переменные, а в постгрессе? В принципе
KP> это не так уж и важно, в джаве можно у рекордсета спросить,
KP> сколько в нем строчек, но ... насколько эффективно он
KP> спрошивает, нет ли дополнительной загрузки на сервер? У
KP> вижуал бэйсика с его ADO вроде не рекомедуется спрашивать у
KP> резалтсета, сколько в нем строчек, мол может быть
KP> медленно, да еще до кучи он и наврать может.

KP> -- Tell me why, why, why aaaayayayay
--
-- Это не скрипт, это перловая каша!

Cyrill Malevanov

unread,
Apr 12, 2002, 4:58:59 PM4/12/02
to
Hi Kirill!

13 Апр 02, Kirill Petrov wrote to All:


KP> вот скажем сделал я селект на базе данных,

KP> как можно помотреть сколько строчек вернул это запрос? Интересует
KP> исключительно постргерс. В микрософтовском вот например есть
KP> специальные переменные, а в постгрессе? В принципе это не так уж и
KP> важно, в джаве можно у рекордсета спросить, сколько в нем строчек, но
KP> ... насколько эффективно он спрошивает, нет ли дополнительной загрузки
KP> на сервер?
Hе знаю, как на java, а на perl/php никаких проблем нет, так как в PostgreSQL
API есть нормальная get_rows_number или что-то в этом духе. И бэкенд умеет
сообщать affected rows.

WBR, Cyrill

Kirill Petrov

unread,
Apr 13, 2002, 2:11:49 AM4/13/02
to
Wazup, \n Kirill Petrov wrote:

начал ковыряться сам и соответственно появились новые вопросы:


> вот скажем сделал я селект на базе данных,

> как можно помотреть сколько строчек вернул это запрос? Интересует

> исключительно постргерс. В микрософтовском вот например есть специальные
> переменные, а в постгрессе?
> В принципе это не так уж и важно, в джаве можно у рекордсета спросить,
> сколько в нем строчек, но ... насколько эффективно он спрошивает, нет ли
> дополнительной загрузки на сервер?
у резалтсета этого оказывается и спросить нельзя, можно только двинуть
курсор в самый конец выборки и посмотреть номер строчки. Получается что мне
понадобиться создавать скролируемый резалт сет. Никто не знает насколько
скроллируемый резалтсет в Постгрессе тормознее обычного?
Все доки уже перерыл, неужели никто не знает как у Постгресса спросить
сколько было строчек в последнем вопросе???

Serge V. Tarasov

unread,
Apr 14, 2002, 2:18:25 AM4/14/02
to
"Kirill Petrov" <KVPe...@valdosta.edu> wrote in message
news:9352729.Z...@muad-dib.kirill.dyndns.org...

Если у используемого Вами клиента нет специальной функции, то можно запросом
спрашивать используя count(чего искали)

Удачи,
Max.

Kirill Petrov

unread,
Apr 14, 2002, 1:56:30 PM4/14/02
to
Wazup, \n Serge V. Tarasov wrote:

>> у резалтсета этого оказывается и спросить нельзя, можно только двинуть
>> курсор в самый конец выборки и посмотреть номер строчки. Получается что
> мне
>> понадобиться создавать скролируемый резалт сет. Никто не знает насколько
>> скроллируемый резалтсет в Постгрессе тормознее обычного?
>> Все доки уже перерыл, неужели никто не знает как у Постгресса спросить
>> сколько было строчек в последнем вопросе???
>
> Если у используемого Вами клиента нет специальной функции, то можно
> запросом спрашивать используя count(чего искали)

тогда получится два запроса :-(
сначала спрошу каунт а потом сам селект

Serge V. Tarasov

unread,
Apr 15, 2002, 1:55:28 AM4/15/02
to
"Kirill Petrov" <KVPe...@valdosta.edu> wrote in message
news:1935052.L...@muad-dib.kirill.dyndns.org...

> >> у резалтсета этого оказывается и спросить нельзя, можно только двинуть
> >> курсор в самый конец выборки и посмотреть номер строчки. Получается что
> > мне
> >> понадобиться создавать скролируемый резалт сет. Никто не знает
насколько
> >> скроллируемый резалтсет в Постгрессе тормознее обычного?
> >> Все доки уже перерыл, неужели никто не знает как у Постгресса спросить
> >> сколько было строчек в последнем вопросе???
> >
> > Если у используемого Вами клиента нет специальной функции, то можно
> > запросом спрашивать используя count(чего искали)
> тогда получится два запроса :-(
> сначала спрошу каунт а потом сам селект

Зачем два? В одном можно.

Удачи,
Max.


Kirill Petrov

unread,
Apr 15, 2002, 10:16:16 AM4/15/02
to
Wazup, \n Serge V. Tarasov wrote:

>> >
>> > Если у используемого Вами клиента нет специальной функции, то можно
>> > запросом спрашивать используя count(чего искали)
>> тогда получится два запроса :-(
>> сначала спрошу каунт а потом сам селект
> Зачем два? В одном можно.

ээээто как?
кагда каунт пишешь у тебя же получается что-то типа:
SELECT COUNT(*) FROM publishers
такой запрос возвращает ровно одну строчку, в которое будет количество
строк в таблице.
А мне нужна и сама таблица. Или я идиот или одно из двух.

Кирилл

Roman Dawydkin

unread,
Apr 15, 2002, 12:25:56 AM4/15/02
to
[Sat 13/Apr/2002 10:11] Kirill Petrov ==> Kirill Petrov

KP> у резалтсета этого оказывается и спросить нельзя, можно только двинуть
KP> курсор в самый конец выборки и посмотреть номер строчки. Получается что
KP> мне понадобиться создавать скролируемый резалт сет. Hикто не знает
KP> насколько скроллируемый резалтсет в Постгрессе тормознее обычного?

Hасколько я разбирался в тексте стандартного JDBC-драйвера, он _всегда_
создаёт скроллируемый resultset, для этого сразу целиком читает результат в
память, а потом уже с ним оперирует.

KP> Все доки уже перерыл, неужели никто не знает как у Постгресса
KP> спросить сколько было строчек в последнем вопросе???

Вообще, в стандарте JDBC таких штук нет, так что либо через resultset, либо
через count(*), либо учитывать конкретный драйвер и смотреть его скрытые
методы.

... <air...@chat.ru>

Stanislav Kaplunovski

unread,
Apr 16, 2002, 6:03:52 AM4/16/02
to
> кагда каунт пишешь у тебя же получается что-то типа:
> SELECT COUNT(*) FROM publishers

SELECT *, COUNT(*) AS kolichestvo_strok FROM ....

WBW,
Stas.


Kirill Petrov

unread,
Apr 16, 2002, 9:49:51 AM4/16/02
to

чувствую себя идиотом... но

---begin---
> prob=> SELECT name, COUNT(*) AS hehe FROM u_state;
ERROR: Attribute u_state.name must be GROUPed or used in an aggregate
function
---end---

если их сгруппируешь по этому u_state.name, то мне и выдается таблица у
которой в каждой строчке в колонке hehe стоит 1. И толку мне от того?..

как пользовать u_state.name в агрегатной функции я как-то тоже не понял,
сколько не пытался вся та же самая ошибка

Да неужели тут нет людей шарящих в постгрессе или в джавовский драйверах от
него?
Если уж скл-ом нельзя спросить, может как-то можно выпытать это у самого
драйвера?

Stanislav Kaplunovski

unread,
Apr 16, 2002, 10:02:13 AM4/16/02
to
> чувствую себя идиотом... но
>
> ---begin---
> > prob=> SELECT name, COUNT(*) AS hehe FROM u_state;
> ERROR: Attribute u_state.name must be GROUPed or used in an aggregate
> function
> ---end---

SELECT name, COUNT(name) AS hehe FROM u_state;

WBW,
Stas.


Serg U.

unread,
Apr 16, 2002, 3:10:16 PM4/16/02
to
Tue Apr 16 2002 18:02, Stanislav Kaplunovski wrote to Kirill Petrov:

SK> SELECT name, COUNT(name) AS hehe FROM u_state;


Или это полная чушь, или что-то новенькое в SQL...

SeazoN

unread,
Apr 16, 2002, 10:18:39 AM4/16/02
to

Kirill Petrov <KVPe...@valdosta.edu> wrote in message
news:15678207....@muad-dib.kirill.dyndns.org...
> From: Kirill Petrov <KVPe...@valdosta.edu>

>
> Wazup, \n Stanislav Kaplunovski wrote:
>
> >> кагда каунт пишешь у тебя же получается что-то типа:
> >> SELECT COUNT(*) FROM publishers
> >
> > SELECT *, COUNT(*) AS kolichestvo_strok FROM ....
>
> чувствую себя идиотом... но
>
> - ---begin---

> > prob=> SELECT name, COUNT(*) AS hehe FROM u_state;
> ERROR: Attribute u_state.name must be GROUPed or used in an aggregate
> function
> - ---end---

>
> если их сгруппируешь по этому u_state.name, то мне и выдается таблица у
> которой в каждой строчке в колонке hehe стоит 1. И толку мне от того?..
>
> как пользовать u_state.name в агрегатной функции я как-то тоже не понял,
> сколько не пытался вся та же самая ошибка
>
> Да неужели тут нет людей шарящих в постгрессе или в джавовский драйверах
от
> него?
> Если уж скл-ом нельзя спросить, может как-то можно выпытать это у самого
> драйвера?

видно судьба тебе

а) 2 селекта \
---- выбирай что больше нравится
б) *sql_num_rows()/


Alex Pereklad

unread,
Apr 14, 2002, 12:27:27 PM4/14/02
to
Пpивет Kirill!

13 апpеля 2002 года (а было тогда 10:11)
Kirill Petrov в своем письме к Kirill Petrov писал:

KP> y pезалтсета этого оказывается и спpосить нельзя, можно только двинyть
KP> кypсоp в самый конец выбоpки и посмотpеть номеp стpочки. Полyчается
KP> что мне понадобиться создавать скpолиpyемый pезалт сет. Hикто не знает
KP> насколько скpоллиpyемый pезалтсет в Постгpессе тоpмознее обычного? Все
KP> доки yже пеpеpыл, неyжели никто не знает как y Постгpесса спpосить
KP> сколько было стpочек в последнем вопpосе???

Может, пpосто повтоpить последний запpос, поставив в качестве выдаваемого поля
count (*)? :)

С yважением, Alex 14 апpеля 2002 года

Pavel Veller

unread,
Apr 17, 2002, 5:08:27 AM4/17/02
to
Hello, Kirill!

[skipped]

KP> Да неужели тут нет людей шарящих в постгрессе или в джавовский
KP> драйверах от него?
KP> Если уж скл-ом нельзя спросить, может как-то можно выпытать это у
KP> самого драйвера?

java.sql.ResultSet rs = ....;
((org.postgresql.ResultSet)rs).getTupleCount();

best regards,
Pavel Veller.
E-mail: pve...@itos.eu.org

--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Kirill Petrov

unread,
Apr 17, 2002, 4:34:53 PM4/17/02
to
Wazup, \n Pavel Veller wrote:

> Hello, Kirill!
>
> [skipped]
>
> KP> Да неужели тут нет людей шарящих в постгрессе или в джавовский
> KP> драйверах от него?
> KP> Если уж скл-ом нельзя спросить, может как-то можно выпытать это у
> KP> самого драйвера?
>
> java.sql.ResultSet rs = ....;
> ((org.postgresql.ResultSet)rs).getTupleCount();

спасибо!!!
хех, надо бы как-нить заглянут в драйвера постгресса
там наверное столько всего вкусного :-)

Bulat Ziganshin

unread,
Apr 30, 2002, 4:24:09 AM4/30/02
to
* Originally in SU.DBMS.SQL
Приятного тебе дня и незабываемой ночи, Kirill!

Sunday April 14 2002, Alex Pereklad writes to Kirill Petrov:
KP>> Постгpессе тоpмознее обычного? Все доки yже пеpеpыл, неyжели
KP>> никто не знает как y Постгpесса спpосить сколько было стpочек в
KP>> последнем вопpосе???

а ведь можно-таки сделать такой запрос :))))

select name, (select count(*) from t) from t

и дальше очевидная "оптимизация":

select name, t2.* from t, (select count(*) from t) as t2

Bulat, mailto:bulatz-AT-fort.tatarstan.ru, ICQ: work 15872722, home 11849833

... Иногда для того, чтобы изменить свое восприятие мира,
... люди пытаются изменить сам мир

0 new messages