Artur
Formella
Student,
Politechnika Gdańska
Temat: Asynchroniczny Notify
Czy ktoś z Państwa wie jak można asynchronicznie uruchomić NOTIFY ?Spraw wygląda tak - jest duże zapytanie złożone z wielu pod-zapytań, które mocno używają wyników poprzednich pod-zapytań. Systemowi, który zlecił wykonanie tego zadania zależy zarówno na wynikach cząstkowych jak i wyniku całości. Przy czym odpowiedź zawierająca te wyniki cząstkowe jest tym lepsza im szybciej nastąpi.
Nie ma możliwości wykonania każdej cząstek osobno ze względu na wydajność obliczania ich wielokrotnie.
Rozwiązaniem wydaje się być zwrócenie wielu odpowiedzi z jednego zapytania SQL, przy czym kolejne części powinny być zwracane w różnym momencie.
Polecenie PostgreSQL z użyciem CTE:
with sth1 as(
SELECT aa from long_query1()
), notify1 as (
SELECT pg_notify('notify_test', json_build_object('sth1', aa )) from sth1;
), sth2 as (
select long_query2( aa ) as bb from sth1
), notify2 as (
SELECT pg_notify('notify_test', json_build_object('sth2', bb )) from sth2;
)
select notify1,notify2;
Wydawało by się że jestem blisko rozwiązania, ale polecenie NOTIFY wykonuje się faktycznie dopiero po zakończeniu transakcji - czyli dopiero na końcu polecenia.
Czy ma ktoś lepszy pomysł?