Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / таймаут в EXECUTE / 3 сообщений из 3, страница 1 из 1
09.06.2018, 12:42
    #39658813
Уткъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
таймаут в EXECUTE
Приветствую.

Можно ли установить таймаут на EXECUTE.



Сейчас такая схема:

динамически формируется строка с с командой COPY
потом запускается

Код: sql
1.
2.
3.
4.
5.
cmd_var = 'copy tmp1 from program ''dir /a:-d /b '||dir_many_files||''';';
BEGIN
EXECUTE cmd_var;
EXCEPTION WHEN others  THEN RAISE NOTICE 'Ошибко!';
END;   





Так вот, иногда этот EXECUTE зависает и сессию даже убить не получается через pg_terminate_backend





Можно ли как-то таймаут поставить на EXECUTE ?
...
Рейтинг: 0 / 0
21.06.2018, 15:05
    #39663667
Rutra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
таймаут в EXECUTE
Уткъ,

Думаю можно попробовать statement_timeout :
Код: sql
1.
2.
3.
SET statement_timeout to 100;
EXECUTE cmd_var;
RESET statement_timeout;
...
Рейтинг: 0 / 0
21.06.2018, 16:18
    #39663701
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
таймаут в EXECUTE
RutraУткъ,

Думаю можно попробовать statement_timeout :
Код: sql
1.
2.
3.
SET statement_timeout to 100;
EXECUTE cmd_var;
RESET statement_timeout;



Не советуйте когда не знаете.
statement_timeout работает на top level запросы от приложения и никак не работает на запросы внутри хранимки или подобные.
Timeout можно установить на вызов всего запроса или хранимой процедуры если она от клиента запускается а не изнутри другой процедуры.

statement_timeout (integer)

Abort any statement that takes more than the specified number of milliseconds, starting from the time the command arrives at the server from the client. If log_min_error_statement is set to ERROR or lower, the statement that timed out will also be logged. A value of zero (the default) turns this off.

PS: Я не уверен что copy from program если program зависает и не отвечает вообще можно снять каким то образом (это на уровне самой запускаемой программы решать надо) и даже top level statement_timeout может не срабатывать.
Это очень плохая практика вызывать из хранимки внешние программы это задача кода который хранимку вызывает никаких обращений ко внешним ресурсам из базы делать не надо (это к трудноразрешимым проблемам), база это не application server.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / таймаут в EXECUTE / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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