Почему dblink не становится занятым?

У меня есть функция, похожая на эту, которая работает довольно хорошо, но мне интересно, почему.

create function xyz(<some_input>, p_connection_name in varchar default null, <some_output>)
    begin
        if (p_connection_name is null)
            p_connection_name := <something>;
            perform buildup_loopback_connection(p_connection_name);
        end if;

        for r1 in select <?> from dblink(p_connection_name, <?>) loop
            select <?>
            into <?>
            from dblink(p_connection_name, <?>);

            -- and even this recursive call is working interestingly
            if (<some_circumstances>) then
                <?> := xyz(<?>, p_connection_name);
            end if;     
        end loop;
    end;

Я ожидаю, что последний из внутренних вызовов d blink по тому же соединению вернет исключение, потому что курсор в цикле for все еще использует его. Почему это как-то не блокирует соединение? Тем не менее, безопасно ли это делать в целом?

(PG9.6)

Благодарю вас!

0 ответов

Другие вопросы по тегам