powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / java ошибка jdbc драйвера
14 сообщений из 14, страница 1 из 1
java ошибка jdbc драйвера
    #39091283
test__user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Подключаюсь к базе Postgres и делаю запрос к таблице в 195 колонок и 180 000 записей. Получаю ошибку:

org.postgresql.util.PSQLException: Ran out of memory retrieving query results.

Гуглил, советуют использовать setFetchSize, но почему то не помогает, небольшой фрагмент прилагаю
Код: java
1.
2.
3.
4.
stmt = conn.createStatement();
          //stmt.setFetchSize(187589);
          String sql = "SELECT * FROM my_table";
          ResultSet rs = stmt.executeQuery(sql);



Как быть в такой ситуации?Спасибо!:)
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091291
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
setFetchSize() с маленьгим значением вызвать.
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091294
test__user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

На сколько маленьким?:) Пробовал 50, 0.
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091295
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091311
test__user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

AutoCommit не использую, по этой ссылке говорят, что использовать fetchsize(0) для выбора всех строк, использую, ошибка остается,
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091350
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test__user, попробуй SELECT .... LIMIT 100
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091373
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test__userзапрос к таблице в 195 колонок и 180 000 записей. Получаю ошибку:
...
Код: java
1.
2.
3.
...
String sql = "SELECT * FROM my_table";
...


возможно, количество колонок сказывается, а возможно какое-то название столбца.
Посмотри в документации к драйверу какие лимиты на количество столбцов в результате и нет ли каких-то ограничений на "служебные слова" в названиях. И попробуй в запросе явно указать нужные столбцы, а не звездочку
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091412
test__user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,


с limit 100 все работает корректно
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091416
test__user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,
когда ограничиваю по количеству записей (limit 100) все работает, колонки указываю явно, звездочку указал здесь, чтобы не загромождать свой пост, в названии колонок нет служебных слов
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091445
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test__user, твоя ситуация очень хреновая. Учитывая особые обстоятельтва (толстая шапка на табличке)
я-бы предложил не выбирать 150 колонок а взять те которые нужны. Чем чёрт не шутит в этом постгрессе
может ты упёрся лбом в limitation и не можешь через протокол протолкнуть 1 единицу объёма.

Или какое-то binary data поле подкидывает свинью. Его тоже хорошо-бы детектировать и убрать.
Работать с ним отдельным запросом типа детализации основного.
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091456
test__user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Вас понял, буду пробовать. Спасибо!:)
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091457
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test__userBlazkowicz,

AutoCommit не использую, по этой ссылке говорят, что использовать fetchsize(0) для выбора всех строк, использую, ошибка остается,

По ссылке реккомендовали AutoCommit в false установить. Возможно из-за него и не происходит отложенной загрузки. Чтобы закоммитить запрос драйвер всё и вычитывает.
Код: java
1.
2.
connection.setAutoCommit(false);
statement.setFetchSize(50);
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091568
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytontest__user, попробуй SELECT .... LIMIT 100

Неудачный совет. Работать то будет, но зачем делать плохо. При многократной подаче SELECT для диапазона, определяемого OFFSET и LIMIT, данные будут читаться из базы с самого начала и потом из них выделяться количество LIMIT. То есть, работать будет медленно.

maytontest__user, твоя ситуация очень хреновая. Учитывая особые обстоятельтва

ничего необычного или хренового. Надо только не читать из таблицы её всю сразу (а это обычное соображение при работе с SELECT) и желательно использовать другой способ, чем LIMIT (такие есть).

Чем чёрт не шутит в этом постгрессе
может ты упёрся лбом в limitation и не можешь через протокол протолкнуть 1 единицу объёма.


Фантазия. Так не следует работать ни с какой базой.
...
Рейтинг: 0 / 0
java ошибка jdbc драйвера
    #39091662
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вряд ли поможет, но чтобы уже быть уверенным, что все опробовано, я бы попробовал создавать stmt с параметром ResultSet.TYPE_FORWARD_ONLY

И еще, можно сначала перечислить все колонки, потом половину колонок убрать. Если запрос не прошел - половину из существующих убрать, если прошел - заменить существующие теми, что убрали и тд и тп, повторять циклически пока не останется мало колонок. А потом уже смотреть конкретней что там плохого в оставшихся.

А setFetchSize постгрессом вообще поддерживается? Судя по тому, что с размером 50 оно у вас не сработало - fetchSize не поддерживается. У вас же, когда fetchsize был 50 - тот же экзепшен бросался? Или бросало другой экзепшен?

Я не работал с постгрессом, но эти все свободные базы - они ведь могут не полностью его поддерживать. К вопросу о том, насколько маленьким. Например, мускул поддерживает только режим setFetchSize(Integer.MIN_VALUE), что означает row-by-row fetching (хотя на практике извлекает небольшими группами - подозреваю, что решает по размеру). На практике этот режим делает tcp-трафик больше, но зато пользуясь этим режимом можно сделать полный селект очень большой таблицы, которая в память вся не помещается. Возможно, в постгрессе есть что-то подобное - гляньте в документацию.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / java ошибка jdbc драйвера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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