Почему 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)
Благодарю вас!