powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как проверить в триггере, что perform dblink_connect открыт иди закрыт?
3 сообщений из 3, страница 1 из 1
Как проверить в триггере, что perform dblink_connect открыт иди закрыт?
    #39851887
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем есть триггер который срабатывает на инсерт скажем условно такой

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
СREATE OR REPLACE FUNCTION prc_insert_to_countries()
      RETURNS trigger AS
    $$
    DECLARE 
        insert_statement TEXT;
        res TEXT;
    BEGIN                
        perform dblink_connect('db2', 'dbname=db2 host=localhost 
        user=xxx password=xxx');

        insert_statement = 'insert into countries(id, name, flag) 
                                    values ('||NEW.id||', 
                                    '''||NEW.name||''', 
                                    '''||NEW.flag||'''
                                    );';
        res := dblink_exec('db2', insert_statement, true);
        RAISE INFO '%', res;
        perform dblink_disconnect('db2');
        RETURN NEW;
    END;
    $$
    LANGUAGE 'plpgsql';



Есть неприятный момент если в процедуре, что пошло не так
после вызова

Код: sql
1.
        res := dblink_exec('db2', insert_statement, true);




, то до этого участка кода не доходит

Код: sql
1.
2.
3.
4.
        
        RAISE INFO '%', res;
        perform dblink_disconnect('db2');
        RETURN NEW;



и.е. dblink не закрывается
В следующийй раз триггер не срабатывает говорит, что dblink_connect уже открыт.

Как такую ситуацию нужно обходить?

P.S. Я сам ламер в Постгресе и никогда ничего подобного не делал вот пришлось столкнуться. Заранее премного благодарен.

Сам пример честно скомуниздил https://stackoverflow.com/questions/42003578/postgresql-dblink-inserting-on-remote-database

Если кому хочется воссоздать ситуацию наскоряк
...
Рейтинг: 0 / 0
Как проверить в триггере, что perform dblink_connect открыт иди закрыт?
    #39852022
PavelVX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смотрите в сторону перехвата ошибок.
BEGIN
-- Тут располагается потенциально опасный код
EXCEPTION
WHEN '<идентификатор_ошибки>' THEN
-- Тут находится код, обрабатывающий исключение
END
...
Рейтинг: 0 / 0
Как проверить в триггере, что perform dblink_connect открыт иди закрыт?
    #39852305
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelVXСмотрите в сторону перехвата ошибок.
BEGIN
-- Тут располагается потенциально опасный код
EXCEPTION
WHEN '<идентификатор_ошибки>' THEN
-- Тут находится код, обрабатывающий исключение
END

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


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