powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
3 сообщений из 3, страница 1 из 1
PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
    #39120276
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю вроде все по доке, что бы ResultSet работал через курсор. Таким вот образом:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
conn.setAutoCommit( false );
stmt =  conn.createStatement();
stmt.setFetchSize( 50 );
rset = stmt.executeQuery( sql );			

while ( rset.next() ) {
    ...
}



50 строк возвращаются нормально, на 51 строке ошибка:

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: portal "C_2" does not exist
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)
at org.postgresql.core.v3.QueryExecutorImpl.fetch(QueryExecutorImpl.java:2113)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java:1965)


Что это такое и как от этого избавится? Поиском по google вопросы о такой же проблеме нашел, но вменяемого ответа не наел (((

Версии:
1)
OS RedHat на Amazon EC2 (версия думаю не важна).
2)
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)
3)
postgresql-9.4-1205.jdbc42.jar
4)
SELECT version();

PostgreSQL 9.2.14 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.3 20140
911 (Red Hat 4.8.3-9), 64-bit
...
Рейтинг: 0 / 0
PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
    #39120399
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал downgrade jdbc драйвера до postgresql-9.2-1004.jdbc41.jar (что бы совпадало с версией сервера), те же ...., только в профиль:

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: portal "C_3" does not exist
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.fetch(QueryExecutorImpl.java:2089)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java:1916)

Кто нибудь в PostgreSQL с большими таблицами работает? (setFetchSize)

(((
...
Рейтинг: 0 / 0
PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
    #39120451
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, причину ошибки нашел. Внутри цикла фетча из курсора НЕЛЬЗЯ использовать Commit. При commit курсоры на стороне сервера по умолчанию закрываются.

Обидно, досадно... но по крайне мере понятно.

В теме
http://www.postgresql.org/message-id/44B029D6.9000807@opencloud.com]http://www.postgresql.org/message-id/44B029D6.9000807@opencloud.com

Говорит, что нужно использовать ResultSet.HOLD_CURSORS_OVER_COMMIT, но в этом случае у меня похоже курсоры вырубаются нафиг и я получаю "Out of heap memory".

Дальше не разбирался, просто вынес commit за пределы цикла. Потом, наверное, просто буду читать и писать в БД через разные Connection.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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