Как постепенно распечатать результаты SQL-запроса до конца выполнения? - PullRequest
1 голос
/ 18 апреля 2019

Я делаю довольно большой запрос Postgres. Можно ли выводить результаты постепенно, несмотря на ожидание окончания запроса, чтобы повторить все результаты?

Мой код:

$sql1 = pg_query("select zhu_gid from indicateurs.note where zhu_gid not in (select gid from public.zh);");

while($data = pg_fetch_array($sql1))
   {
   echo $data['zhu_gid']."/";
   }

1 Ответ

1 голос
/ 18 апреля 2019

Что касается вашего вопроса: Нет. Сам Postgres сначала создает набор результатов, а затем возвращает клиенту.

Вы можете использовать курсор для этого (который все еще должен выполнить запрос в первую очередь). Или несколько запросов, разделив результат с LIMIT / OFFSET или (предпочтительно) детерминированными WHERE условиями. Вам нужно добавить детерминистический ORDER BY для тех. Но все эти решения pagination имеют свои специфические трудности. Связанный:

Кроме того, я бы не стал использовать NOT IN. См:

Рассмотрим вместо этого:

SELECT n.zhu_gid
FROM   indicateurs.note n
LEFT   JOIN public.zh ON zh.gid = n.zhu_gid
WHERE  zh.gid IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...