ограничить время запроса на стороне клиента PostgreSQL - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь запросить базу данных PostgreSQL, но это публичный c сервер, и я действительно не хочу тратить много ЦП в течение длительного времени.

Так что я Интересно, есть ли какой-нибудь способ ограничить время моего запроса для определенной продолжительности c, например, 3/5/10 минут.

Я предполагаю, что есть синтаксис, подобный limit, но не для количества результатов но для продолжительности запроса.

Спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2020

Установите statement_timeout, тогда ваш запрос будет завершен с ошибкой, если он превысит этот предел.

Согласно этой документации:

Statement_timeout (целое число)

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

Не задано значение Statement_timeout в postgresql .conf, поскольку это повлияет на все сеансы.

1 голос
/ 18 февраля 2020

Вот потенциальный улов с использованием LIMIT для управления продолжительностью выполнения запроса. По праву, вы должны также использовать ORDER BY в своем запросе, чтобы сообщить Postgres, как именно он должен ограничивать размер набора результатов. Но предостережение заключается в том, что Postgres обычно приходится материализовать весь набор результатов при использовании LIMIT с ORDER BY, а затем также возможно сортировать, что может занять больше времени, чем простое чтение во всем наборе результатов.

Одним из способов решения этой проблемы может быть использование LIMIT без ORDER BY. Если план выполнения не включает чтение всей таблицы и сортировку, это может быть одним из способов сделать то, что вы хотите. Однако имейте в виду, что если вы go этот маршрут, Postgres будет иметь бесплатную лицензию на возврат любых записей из таблицы, которую он желает, в любом порядке. Это, вероятно, не то, что вам нужно с точки зрения бизнеса или отчетности.

Но гораздо более подходящим подходом здесь было бы просто настроить запрос с помощью таких вещей, как индексы, и ускорить его до того уровня, на котором вы работаете. не нужно прибегать к LIMIT трюку.

...