Необходимо закрыть возвращенный refcursor из хранимой функции plpgsql или нет? - PullRequest
0 голосов
/ 21 октября 2018

Использование PostgreSQL Я сохраняю функцию, используя следующую структуру:

create or replace function myfunc() returns refcursor as $$
declare rc refcursor := 'mycursor';
-- ...
begin;
    -- ...
    open rc for select ...;
    return rc;
end; $$ language plpgsql;

Возвращает курсор, который я использую в обязательной транзакции.Который я использую так:

begin;
select myfunc();
fetch all in mycursor;
close mycursor;
commit;

Но в большинстве примеров и учебных пособий утверждение close mycursor; просто опускается.Я знаю, что вам нужно закрыть его при внутреннем использовании в функции, но когда он возвращается, может быть commit; автоматически закрывает все открытые курсоры?Итак, действительно ли необходимо закрывать курсор?

Не знаете, как проверить, открыт ли он после commit;, поскольку курсор больше не находится в области видимости.

1 Ответ

0 голосов
/ 22 октября 2018

Как указано в документах

ЗАКРЫТЬ закрывает портал под открытым курсором.Это может быть использовано для освобождения ресурсов раньше, чем конец транзакции, или для освобождения переменной курсора, которая будет открыта снова.

Вы можете использовать close cursor_name для releasing resources earlier than end of transaction, так что если вы неесли закрыть курсор и end или commit вашей транзакции, то это не должно иметь никакого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...