LINUX.ORG.RU

Выполнить запрос 1 раз, но получать записи по кускам

 ,


0

1

Использую PostgreSQL, есть большая таблица несколько миллионов записей, для примера

CREATE TABLE towns ( id INTEGER PRIMARY KEY, name CHARACTER VARYING(30), root INTEGER );

INSERT INTO towns VALUES (1, ‘Berlin’, 1);

INSERT INTO towns VALUES (2, ‘Rome’, 2);

INSERT INTO towns VALUES (3, ‘Paris’, 1);

INSERT INTO towns VALUES (1, ‘Turin’, 2);

Нужно используя курсоры в Postgresql написать запрос, получить все записи отсортированные по root, выполнить запрос 1 раз, а получать по значению root

https://postgrespro.ru/docs/postgres...lpgsql-cursors



Последнее исправление: polin11 (всего исправлений: 1)

Ссылка в верхнем посте нерабочая.

Задание сформулировано непонятно.

Если выборку надо поместить в курсор, то в конце SQL-команды надо дописать INTO CURSOR имя_курсора.

Если речь идёт о сортировке по полю root, то ORDER BY root.

Если надо как-то сгруппировать данные по полю root, то есть выражение GROUP BY root.

Если надо получать данные выборки частями, например, не более N записей, то в SELECT нужно добавить выражение OFFSET M LIMIT N, где M — число уже прочитанных записей, 0, N, 2N, 3N и т. д. Но количество запросов будет равно общему_числу_записей/N + 1, если остаток от деления не 0, иначе — + 0. В один запрос всё это уложится только при N >= числу записей.

Подробнее см., например, https://postgrespro.ru/docs/postgrespro/9.5/sql-select или в клиенте psql по команде \h SELECT.

Если что-то неясно, пиши более чётко, что нужно получить, что ты для этого пытался сделать, какие SQL-команды вводил, что ожидал увидеть и что увидел.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

Задание сформулировано непонятно

Объясняю. Есть большая таблица. ТС хочет выполнить один раз выборку по root чтобы потом получать строки по конкретному значению root. Но таблица-то большая, map root->row жрёт всю память.

Ответ ТСу: не мучай жопу, делай запрос на каждый root когда это нужно.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.