превышено допустимое число курсоров на сессию? Что будет если в Java утекают открытые курсоры?
Явного лимита на количество курсоров на сессию нет. А что значит "утекают открытые курсоры"?
Скорее всего приложение не закрывает за собой
А сессии закрывает?
Нет. Это в рамках рабочей сессии. Ну и опять таки через пулер - он то не даст закрыть сессию.
В нормальном пуле всегда выполняется команда очистки ресурсов при возвращении соединения в пул. Как правило, это discard. Все ресурсы, включая курсоры, очистятся. Если соединения в пул не возвращаются, то проблема уже другого уровня.
Мне кажется, что в postgresql просто нельзя запустить новый запрос, не сбросив курсор. Т.е. либо клиентская библиотека его сбросит, либо сервер скажет "неверная последовательность запросов". Автономных транзакций тоже нет.
Можно открыть много курсоров with hold.
Под клиентской библиотекой имеется в виду libpq под капотом?
Да. Про WITH HOLD я не вспомнил. С его помощью, действительно, наверное, можно переполнить и получить ошику как ORA-01000
Мне кажется JDBC с pure-java implementation может быть существенно другим
Вне зависимости от драйвера, курсоры (в т.ч. with hold) могут открываться с помощью declare.
Тут курсор скорее в смысле Java resultset
А что не так? Открытый resultset не держит открытый курсор пока по нему проматывается?
Связь в том, что ResultSet запросто можно забыть закрыть
Как минимум это же интерфейс всего лишь, не так?
Интерфейс в смысла API или в смысле Java Interface который требует имплементации?
Значит он как-то имплементирован, раз им можно воспользоваться
Если там под катом реализация на уровне протокола, то каждый курсор будет жить не дольше транзакции.
А вот, оказывается, не всегда: https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor
Спасибо! Т.е. бывают оба случая.
Обсуждают сегодня