powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выполнить несколько dblink парралельно
5 сообщений из 5, страница 1 из 1
Выполнить несколько dblink парралельно
    #39777182
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Подскажите пожалуйста как можно выполнить несколько запросов в dblink парралельно?

Не дожидаясь окончания выполнения каждого.


Например, есть 10 серверов, на которых надо выполнить запрос.

Запрос выполняется 1 час.

Если они будут выполняться в цикле последовательно, общее время будет 10 часов.


Как запустить из анонимнго блока выполнение 10 запросов параллельно?
...
Рейтинг: 0 / 0
Выполнить несколько dblink парралельно
    #39777199
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ,

dblink экспортирует async вызовы, начните с dblink_send_query
...
Рейтинг: 0 / 0
Выполнить несколько dblink парралельно
    #39777214
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkijУткъ,

dblink экспортирует async вызовы, начните с dblink_send_query


Спасибо!


Походе на то что надо!
...
Рейтинг: 0 / 0
Выполнить несколько dblink парралельно
    #39777220
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ,

Для двух запросов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
postgres=# do $do$
begin
    perform dblink_connect('conn1', 'dbname='||current_database());
    perform dblink_connect('conn2', 'dbname='||current_database());

    perform dblink_send_query('conn1', $$do 'begin perform pg_sleep(10); end;'$$);
    perform dblink_send_query('conn2', $$do 'begin perform pg_sleep(10); end;'$$);
    raise notice '%. Запросы отправлены', clock_timestamp()::text;

    loop
        perform pg_sleep(1);
        exit when (select dblink_is_busy('conn1')) = 0 
              and (select dblink_is_busy('conn2')) = 0;
    end loop;
    raise notice '%. Запросы завершены', clock_timestamp();

    perform dblink_disconnect('conn1');
    perform dblink_disconnect('conn2');
end;
$do$;
NOTICE:  2019-02-21 12:52:18.487223+03. Запросы отправлены
NOTICE:  2019-02-21 12:52:28.499136+03. Запросы завершены
DO
...
Рейтинг: 0 / 0
Выполнить несколько dblink парралельно
    #39777230
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел ЛузановУткъ,

Для двух запросов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
postgres=# do $do$
begin
    perform dblink_connect('conn1', 'dbname='||current_database());
    perform dblink_connect('conn2', 'dbname='||current_database());

    perform dblink_send_query('conn1', $$do 'begin perform pg_sleep(10); end;'$$);
    perform dblink_send_query('conn2', $$do 'begin perform pg_sleep(10); end;'$$);
    raise notice '%. Запросы отправлены', clock_timestamp()::text;

    loop
        perform pg_sleep(1);
        exit when (select dblink_is_busy('conn1')) = 0 
              and (select dblink_is_busy('conn2')) = 0;
    end loop;
    raise notice '%. Запросы завершены', clock_timestamp();

    perform dblink_disconnect('conn1');
    perform dblink_disconnect('conn2');
end;
$do$;
NOTICE:  2019-02-21 12:52:18.487223+03. Запросы отправлены
NOTICE:  2019-02-21 12:52:28.499136+03. Запросы завершены
DO




Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выполнить несколько dblink парралельно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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