Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка / 3 сообщений из 3, страница 1 из 1
04.12.2015, 11:37
    #39120276
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
Делаю вроде все по доке, что бы 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
04.12.2015, 12:38
    #39120399
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
Сделал 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
04.12.2015, 13:10
    #39120451
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка
Все, причину ошибки нашел. Внутри цикла фетча из курсора НЕЛЬЗЯ использовать 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
Форумы / Java [игнор отключен] [закрыт для гостей] / PostgreSQL JDBC и большие таблицы (setFetchSize), странная ошибка / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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