|
Цикл
|
|||
---|---|---|---|
#18+
Есть таблица скажем с сотней записей. Можно ли как то циклом(или еще как-то) вывести каждую строку с интервалом 1 мин, чтобы запрос работал 100 минут? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 21:16 |
|
Цикл
|
|||
---|---|---|---|
#18+
Delphi_Watcher, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 12:28 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Delphi_Watcher, Код: sql 1.
Оно так не работает... тут оно 6000 секунд протупит и потом 100 строк сразу выдаст. Это была моя первая версия. Если зачада в psql это сделать то через \watch 60 + курсор можно наколхозить легко. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 14:29 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Delphi_Watcher, Код: sql 1.
Не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 14:34 |
|
Цикл
|
|||
---|---|---|---|
#18+
Maxim Boguk Павел Лузанов Delphi_Watcher, Код: sql 1.
Оно так не работает... тут оно 6000 секунд протупит и потом 100 строк сразу выдаст. Это была моя первая версия. Если зачада в psql это сделать то через \watch 60 + курсор можно наколхозить легко. Точно, это я застрял на последней фразе "чтобы запрос работал 100 минут". Спасибо за поправку. Коль нужно выдавать строки с задержкой, то я за "колхозы" с курсором: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
Хотя всё зависит от задачи, может и plpgsql с raise notice подойдет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:28 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Хотя всё зависит от задачи, может и plpgsql с raise notice подойдет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Так тоже не работает. Функция провесит три секунды, а потом выдаст все нотайсы. Через дблинк можно сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 19:17 |
|
Цикл
|
|||
---|---|---|---|
#18+
big-trot Функция провесит три секунды, а потом выдаст все нотайсы Как раз-таки нотайсы будут отправлены вовремя. По сути, именно так работает vacuum verbose как наиболее заметный пример типа-интерактивного-процесса. Важное слово "отправлены". Может быть ваша библиотека приложения позволяет их получить только после завершения запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 19:41 |
|
Цикл
|
|||
---|---|---|---|
#18+
Melkij Как раз-таки нотайсы будут отправлены вовремя. Может быть они и будут отправлены вовремя, но клиент эти нотайсы получит сразу все одновременно после завершения работы функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 22:31 |
|
Цикл
|
|||
---|---|---|---|
#18+
big-trot Melkij Как раз-таки нотайсы будут отправлены вовремя. Может быть они и будут отправлены вовремя, но клиент эти нотайсы получит сразу все одновременно после завершения работы функции. Смотря какой клиент и как он написан... libpq точно имеет нормальные интерфейсы для асинхронной работы с notice и запросами. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 22:57 |
|
Цикл
|
|||
---|---|---|---|
#18+
big-trot Melkij Как раз-таки нотайсы будут отправлены вовремя. Может быть они и будут отправлены вовремя, но клиент эти нотайсы получит сразу все одновременно после завершения работы функции. см. psql Возможность их обработать сразу, не дожидаясь завершения запроса - есть. Реализует ли приложение эту возможность - вопрос очевидно не к базе, а к приложению ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 10:47 |
|
Цикл
|
|||
---|---|---|---|
#18+
Maxim Boguk Смотря какой клиент и как он написан хотя бы psql и на том примере, которые предложил Павел Лузанов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 11:02 |
|
Цикл
|
|||
---|---|---|---|
#18+
Delphi_Watcher, Можно поинтересоваться нахрена, а главное, зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 11:03 |
|
Цикл
|
|||
---|---|---|---|
#18+
big-trot Maxim Boguk Смотря какой клиент и как он написан хотя бы psql и на том примере, которые предложил Павел Лузанов. Так попробуйте мой пример в psql :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 11:07 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов big-trot пропущено... хотя бы psql и на том примере, которые предложил Павел Лузанов. Так попробуйте мой пример в psql :-) так там и пробывал ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 11:26 |
|
Цикл
|
|||
---|---|---|---|
#18+
big-trot Павел Лузанов пропущено... Так попробуйте мой пример в psql :-) так там и пробывал Случаем не через pgbouncer подключаетесь? Когда psql подключается к postgres напрямую через libpq, то сообщения notice выводятся асинхронно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 14:42 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Так попробуйте мой пример в psql :-) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
версия 9.6 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 14:54 |
|
Цикл
|
|||
---|---|---|---|
#18+
big-trot, На 13 версии notice показываются раз в секунду как и должно быть. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 15:02 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Случаем не через pgbouncer подключаетесь? И всё-таки? Хотя бы вывод \conninfo покажите. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 15:09 |
|
Цикл
|
|||
---|---|---|---|
#18+
Собрал 9.6 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Внимание на результаты clock_timestamp. Что говорит не о том, что notice были отправлены с окончанием запроса, а о том, что for r in (select ...) сначала выполнил весь запрос и лишь потом начал выдавать строки результата. Если перенести sleep в тело цикла, то возвращаемся к Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 16:14 |
|
Цикл
|
|||
---|---|---|---|
#18+
Melkij Внимание на результаты clock_timestamp. Что говорит не о том, что notice были отправлены с окончанием запроса, а о том, что for r in (select ...) сначала выполнил весь запрос и лишь потом начал выдавать строки результата. Сергей, спасибо что не поленился и разобрался. А то думал чудеса какие-то. (Но в случае с pgbouncer поведение такое же: сообщения выводятся разом в конце с одинаковым временем.) Оказалось, что мой пример работает только начиная с 13 версии. Предположительно благодаря вот этому изменению. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 11:58 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Но в случае с pgbouncer поведение такое же: сообщения выводятся разом в конце с одинаковым временем Мимоходом вчера глянул - не смог воспроизвести, корректно прилетают notice. Ну и раз время одинаковое - значит опять же не баунсера задержка. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 12:10 |
|
Цикл
|
|||
---|---|---|---|
#18+
Melkij Павел Лузанов Но в случае с pgbouncer поведение такое же: сообщения выводятся разом в конце с одинаковым временем Мимоходом вчера глянул - не смог воспроизвести, корректно прилетают notice. Ну и раз время одинаковое - значит опять же не баунсера задержка. И еще раз спасибо. Я же на 12 версии проверял :-) В общем, хорошо когда удается разобраться и не оставлять непонятных мест. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 12:44 |
|
Цикл
|
|||
---|---|---|---|
#18+
Павел Лузанов Оказалось, что мой пример работает только начиная с 13 версии. Предположительно благодаря вот этому изменению. Понимаю, что к начальному вопросу отношения не имеет, но уж коли началось... Почуял неладное, когда увидел, что мой пример на 12.8 (последняя версия) и 12.5 работает по-разному. В 12.5 все три строки в конце разом с одним временем выдаются, а в 12.8 - через секунду. Ну потом увидел что и на 13.2 (февральская версия) работает как и на 12.5. Стало ясно, что дело где-то в патче для минорной версии, портированном назад. Поиски привели к майскому коммиту f21fadafaf0fb5ea4c9622d915972651273d62ce . И только тут я вспомнил, что цикл for с курсором выбирает записи не по одной, а по 10, чтобы ускорить обработку. Оказалось, что после появления процедур с коммитами внутри такой prefetch может быть не безопасен и его отменили. Поэтому патч портировали назад вплоть до 11 версии, где процедуры появились. Ну а prefetch по 10 строк легко проверить этим же запросом на любой "старой" версии: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2021, 15:51 |
|
|
start [/forum/topic.php?fid=53&msg=40100398&tid=1993845]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 256ms |
total: | 390ms |
0 / 0 |