powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / DBD::Pg - установка курсора в селекте на некую позицию
7 сообщений из 7, страница 1 из 1
DBD::Pg - установка курсора в селекте на некую позицию
    #33517681
aTz (msk)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая вот проблема, имеем на Perl:

Код: plaintext
my $sth = $dbh->prepare("SELECT * FROM table1");

теперь требуется установить курсор на некую позицию, ну допустим на 17-ю, и затем начать всё вытаскивать, т.е. что-то типа

Код: plaintext
1.
2.
3.
4.
$sth->func( 17 , 'dataseek');
while (my $row = $sth->fetchrow_array())
{
  ...
}

Вот так сработает с DBD::Mysql, но на DBD::Pg такого нет. Знаю что есть подобная функция на php, называется "pg_result_seek()".

Перерыл всё что возможно и где только возможно, в исходниках php даже рыл, но ничего не нашёл.

Решение проблемы через добавление к запросу "LIMIT ... OFFSET ..." не интересует.
Предварительно отфетчить 17 позиций тоже не интересует.
Нужно именно заставить курсор просто перепрыгнуть на какую-либо запись.

Может кто-то всё-таки знает решение данной проблемы?
...
Рейтинг: 0 / 0
DBD::Pg - установка курсора в селекте на некую позицию
    #33517757
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только самому отфетчить 16 записей. Либо как обычно (prepare-execute-fetch-fetch-fetch...), либо через серверный курсор.
Насколько я знаю, DBD::Pg даже в последней версии серверные курсоры не использует, поэтому делать все придется ручками:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
$dbh->do("DECLARE cursor1 SCROLL CURSOR WITH HOLD FOR select  * from table1 order by 1");
$n =  16 ;
$dbh->do("FETCH ABSOLUTE $n FROM cursor1"); #пропускаем первые n записей
my $sth = $dbh->prepare("FETCH ALL FROM cursor1"); #извлекаем все оставшиеся записи
$sth->execute;
while (my @row = $sth->fetchrow_array) {
  print @row,"\n";
}
$dbh->do("CLOSE cursor1");
...
Рейтинг: 0 / 0
DBD::Pg - установка курсора в селекте на некую позицию
    #33518009
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
$dbh->do("DECLARE cursor1 SCROLL CURSOR WITH HOLD FOR select  * from table1 order by 1");
$n =  16 ;
$dbh->do("MOVE ABSOLUTE $n FROM cursor1"); #пропускаем первые n записей
my $sth = $dbh->prepare("FETCH ALL FROM cursor1"); #извлекаем все оставшиеся записи
$sth->execute;
while (my @row = $sth->fetchrow_array) {
  print @row,"\n";
}
$dbh->do("CLOSE cursor1");

Прошу извинить за то, что встрял.
...
Рейтинг: 0 / 0
DBD::Pg - установка курсора в селекте на некую позицию
    #33519252
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aTz (msk)...теперь требуется установить курсор на некую позицию, ну допустим на 17-ю, и затем начать всё вытаскивать...


глупый вопрос..
Вы когда нить задавались вопросом об альтернативе ?
ведь есть более быстрый и более оптимальный способ...

наводка...
1) Зачем делать то, что может сделать сервак ?
2) Зачем нагружать сетку ?

с уважением
(круглый)
...
Рейтинг: 0 / 0
DBD::Pg - установка курсора в селекте на некую позицию
    #33520226
aTz (msk)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolobok0
глупый вопрос..
Вы когда нить задавались вопросом об альтернативе ?
ведь есть более быстрый и более оптимальный способ...

наводка...
1) Зачем делать то, что может сделать сервак ?
2) Зачем нагружать сетку ?

А-по моему очень глупый ответ! Был задан конкретный пример, был задан конкретный вопрос и был получен совершенно не конкретный и ничего не дающий ответ.

Об альтернативе я задумываюсь тогда, когда эту альтернативу я могу применить.
По пункту номер 1:
Что конкретно под этим подразумевается?
Сервак много чего может делать, но меня в данном случае не интересует что может делать сервак.
По-моему я задал конкретный вопрос по модулю DBD::Pg.

Если имеется ввиду та альтернатива, которая приведена выше вашего ответа, то я с ней вполне согласен, но мне это не подходит .
Зато Funny_Falcon по-крайней мере предложил что-то конкретное, что может помоч другим людям, за что ему спасибо.

По пункту номер 2:
По вашему метод $sth->func(17, 'dataseek') работающий для MySQL нагружает сетку? И pg_result_seek() в php тоже это делает?
...
Рейтинг: 0 / 0
DBD::Pg - установка курсора в селекте на некую позицию
    #33521636
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прошения, чужие лавры давят голову: я лишь немного поправил фффф
...
Рейтинг: 0 / 0
DBD::Pg - установка курсора в селекте на некую позицию
    #33522873
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aTz (msk) По пункту номер 1: Что конкретно под этим подразумевается?

конкретный ответ.
практически ЛЮБОЙ сервак SQL МОЖЕТ вернуть ТОЛЬКО ТЕ записи и С ИНТЕРЕСУЮЩЕЙ ВАС ПОЗИЦИИ.

aTz (msk) По пункту номер 2: По вашему метод $sth->func(17, 'dataseek') работающий для MySQL нагружает сетку? И pg_result_seek() в php тоже это делает?

конкретный ответ.
любой ПЕРЕГОН на клиента данных - НАГРУЖАЕТ СЕТКУ. Отсюда видно что ФИТЧ на клиенте - решение быстрое, но качество низкое.

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / DBD::Pg - установка курсора в селекте на некую позицию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]