Насколько я помню устройство libpq (а все прочие клиенты к postgres
делаются на ее базе) там результат запроса возвращается в виде некоторой
целой структуры данных, содержащих, помимо всего прочего и количество
строк в результате. То есть если всякие промежуточные уровни типа
ODBC нигде эту информацию не теряют, то спросить у рекордсета
сколько в нем строк должно быть просто бесплатно.
KP> исключительно постргерс. В микрософтовском вот например
KP> есть специальные переменные, а в постгрессе? В принципе
KP> это не так уж и важно, в джаве можно у рекордсета спросить,
KP> сколько в нем строчек, но ... насколько эффективно он
KP> спрошивает, нет ли дополнительной загрузки на сервер? У
KP> вижуал бэйсика с его ADO вроде не рекомедуется спрашивать у
KP> резалтсета, сколько в нем строчек, мол может быть
KP> медленно, да еще до кучи он и наврать может.
KP> -- Tell me why, why, why aaaayayayay
--
-- Это не скрипт, это перловая каша!
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
начал ковыряться сам и соответственно появились новые вопросы:
> вот скажем сделал я селект на базе данных,
> как можно помотреть сколько строчек вернул это запрос? Интересует
> исключительно постргерс. В микрософтовском вот например есть специальные
> переменные, а в постгрессе?
> В принципе это не так уж и важно, в джаве можно у рекордсета спросить,
> сколько в нем строчек, но ... насколько эффективно он спрошивает, нет ли
> дополнительной загрузки на сервер?
у резалтсета этого оказывается и спросить нельзя, можно только двинуть
курсор в самый конец выборки и посмотреть номер строчки. Получается что мне
понадобиться создавать скролируемый резалт сет. Никто не знает насколько
скроллируемый резалтсет в Постгрессе тормознее обычного?
Все доки уже перерыл, неужели никто не знает как у Постгресса спросить
сколько было строчек в последнем вопросе???
Если у используемого Вами клиента нет специальной функции, то можно запросом
спрашивать используя count(чего искали)
Удачи,
Max.
>> у резалтсета этого оказывается и спросить нельзя, можно только двинуть
>> курсор в самый конец выборки и посмотреть номер строчки. Получается что
> мне
>> понадобиться создавать скролируемый резалт сет. Никто не знает насколько
>> скроллируемый резалтсет в Постгрессе тормознее обычного?
>> Все доки уже перерыл, неужели никто не знает как у Постгресса спросить
>> сколько было строчек в последнем вопросе???
>
> Если у используемого Вами клиента нет специальной функции, то можно
> запросом спрашивать используя count(чего искали)
тогда получится два запроса :-(
сначала спрошу каунт а потом сам селект
> >> у резалтсета этого оказывается и спросить нельзя, можно только двинуть
> >> курсор в самый конец выборки и посмотреть номер строчки. Получается что
> > мне
> >> понадобиться создавать скролируемый резалт сет. Никто не знает
насколько
> >> скроллируемый резалтсет в Постгрессе тормознее обычного?
> >> Все доки уже перерыл, неужели никто не знает как у Постгресса спросить
> >> сколько было строчек в последнем вопросе???
> >
> > Если у используемого Вами клиента нет специальной функции, то можно
> > запросом спрашивать используя count(чего искали)
> тогда получится два запроса :-(
> сначала спрошу каунт а потом сам селект
Зачем два? В одном можно.
Удачи,
Max.
>> >
>> > Если у используемого Вами клиента нет специальной функции, то можно
>> > запросом спрашивать используя count(чего искали)
>> тогда получится два запроса :-(
>> сначала спрошу каунт а потом сам селект
> Зачем два? В одном можно.
ээээто как?
кагда каунт пишешь у тебя же получается что-то типа:
SELECT COUNT(*) FROM publishers
такой запрос возвращает ровно одну строчку, в которое будет количество
строк в таблице.
А мне нужна и сама таблица. Или я идиот или одно из двух.
Кирилл
KP> у резалтсета этого оказывается и спросить нельзя, можно только двинуть
KP> курсор в самый конец выборки и посмотреть номер строчки. Получается что
KP> мне понадобиться создавать скролируемый резалт сет. Hикто не знает
KP> насколько скроллируемый резалтсет в Постгрессе тормознее обычного?
Hасколько я разбирался в тексте стандартного JDBC-драйвера, он _всегда_
создаёт скроллируемый resultset, для этого сразу целиком читает результат в
память, а потом уже с ним оперирует.
KP> Все доки уже перерыл, неужели никто не знает как у Постгресса
KP> спросить сколько было строчек в последнем вопросе???
Вообще, в стандарте JDBC таких штук нет, так что либо через resultset, либо
через count(*), либо учитывать конкретный драйвер и смотреть его скрытые
методы.
... <air...@chat.ru>
SELECT *, COUNT(*) AS kolichestvo_strok FROM ....
WBW,
Stas.
чувствую себя идиотом... но
---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 в агрегатной функции я как-то тоже не понял,
сколько не пытался вся та же самая ошибка
Да неужели тут нет людей шарящих в постгрессе или в джавовский драйверах от
него?
Если уж скл-ом нельзя спросить, может как-то можно выпытать это у самого
драйвера?
SELECT name, COUNT(name) AS hehe FROM u_state;
WBW,
Stas.
SK> SELECT name, COUNT(name) AS hehe FROM u_state;
Или это полная чушь, или что-то новенькое в SQL...
видно судьба тебе
а) 2 селекта \
---- выбирай что больше нравится
б) *sql_num_rows()/
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 года
[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
> Hello, Kirill!
>
> [skipped]
>
> KP> Да неужели тут нет людей шарящих в постгрессе или в джавовский
> KP> драйверах от него?
> KP> Если уж скл-ом нельзя спросить, может как-то можно выпытать это у
> KP> самого драйвера?
>
> java.sql.ResultSet rs = ....;
> ((org.postgresql.ResultSet)rs).getTupleCount();
спасибо!!!
хех, надо бы как-нить заглянут в драйвера постгресса
там наверное столько всего вкусного :-)
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
... Иногда для того, чтобы изменить свое восприятие мира,
... люди пытаются изменить сам мир