Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как выполнить запрос и забыть о нем?  [new]
Синий Слон
Member

Откуда:
Сообщений: 248
Коллеги, приветствую.


Есть такая задача:

Запустить процедуру в постгрессе и сразу отконнектиться, не дожидаясь ее завершения.

процедура выполняется несколько часов.


А запустить и отконнектиться надо за 1 сек.





Как это можно сделать?
13 фев 20, 13:30    [22079220]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
Синий Слон
Member

Откуда:
Сообщений: 248
Если запустить с помощью dblink_send_query и отключиться - соединение выполняется пару секунд, и потом отваливается, не завершившись.


К примеру если внутри поставить

pg_sleep(50);


соединение не дожидается 50 секунд и отваливается через 3-5 сек
13 фев 20, 13:38    [22079230]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
Синий Слон
Member

Откуда:
Сообщений: 248
Почему так? о_О
13 фев 20, 13:39    [22079231]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 973
Никак.
Процесс завершается как только обнаруживает обрыв связи. Меняйте архитектуру задачи. В частности на брокер очереди и отдельный процесс-воркер который будет эту очередь вычитывать и выполнять задачи.
well, при большом желании - напишите background worker базы.
13 фев 20, 13:47    [22079240]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
Синий Слон
Member

Откуда:
Сообщений: 248
Melkij
Никак.
Процесс завершается как только обнаруживает обрыв связи. Меняйте архитектуру задачи. В частности на брокер очереди и отдельный процесс-воркер который будет эту очередь вычитывать и выполнять задачи.
well, при большом желании - напишите background worker базы.



Благодарю за ответ. Скорее всего нечто подобное и придется делать.


Получается что реализация "запустил и отключился" в принципе не возможна?
13 фев 20, 15:37    [22079334]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4071
Синий Слон
Melkij
Никак.
Процесс завершается как только обнаруживает обрыв связи. Меняйте архитектуру задачи. В частности на брокер очереди и отдельный процесс-воркер который будет эту очередь вычитывать и выполнять задачи.
well, при большом желании - напишите background worker базы.



Благодарю за ответ. Скорее всего нечто подобное и придется делать.


Получается что реализация "запустил и отключился" в принципе не возможна?


средствами именно базы - нет.
Это просто не ее задача.
13 фев 20, 15:45    [22079346]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
Синий Слон
Member

Откуда:
Сообщений: 248
Maxim Boguk
Синий Слон
пропущено...



Благодарю за ответ. Скорее всего нечто подобное и придется делать.


Получается что реализация "запустил и отключился" в принципе не возможна?


средствами именно базы - нет.
Это просто не ее задача.



Понял, спасибо.





Melkij
Никак.
Процесс завершается как только обнаруживает обрыв связи. Меняйте архитектуру задачи. В частности на брокер очереди и отдельный процесс-воркер который будет эту очередь вычитывать и выполнять задачи.
well, при большом желании - напишите background worker базы.



Методом тыка понял, что процесс завершается даже не когда обрыв связи. А просто завершилась транзакция. Т.е. запустил в анонимном блоке сенд квари, она висит пару сек и потом переходит из актив в идл. Хотя внутри пг_слип на 30 секунд.
13 фев 20, 16:46    [22079415]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос и забыть о нем?  [new]
DSKalugin
Member

Откуда: Мать городов русских
Сообщений: 355
я для разовых, но многочасовых задач открываю локальную для сервера PostgreSQL/Linux сессию в tmux, запускаю сценарий через psql на выполнение и отключаюсь от tmux.
При этом задача выполняется как фоновый процесс.
Если речь о систематическом запуске таких процедур, то нужно на стороне сервера реализовать некое API, которое будет принимать на вход задачи и выполнять их в асинхронном режиме

Сообщение было отредактировано: 13 фев 20, 16:56
13 фев 20, 16:48    [22079419]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить