|
|
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
Добрый день! Подключаюсь к базе Postgres и делаю запрос к таблице в 195 колонок и 180 000 записей. Получаю ошибку: org.postgresql.util.PSQLException: Ran out of memory retrieving query results. Гуглил, советуют использовать setFetchSize, но почему то не помогает, небольшой фрагмент прилагаю Код: java 1. 2. 3. 4. Как быть в такой ситуации?Спасибо!:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 15:49 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
setFetchSize() с маленьгим значением вызвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 15:59 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, На сколько маленьким?:) Пробовал 50, 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 16:00 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, AutoCommit не использую, по этой ссылке говорят, что использовать fetchsize(0) для выбора всех строк, использую, ошибка остается, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 16:12 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
test__user, попробуй SELECT .... LIMIT 100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 16:41 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
test__userзапрос к таблице в 195 колонок и 180 000 записей. Получаю ошибку: ... Код: java 1. 2. 3. возможно, количество колонок сказывается, а возможно какое-то название столбца. Посмотри в документации к драйверу какие лимиты на количество столбцов в результате и нет ли каких-то ограничений на "служебные слова" в названиях. И попробуй в запросе явно указать нужные столбцы, а не звездочку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 17:00 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
mayton, с limit 100 все работает корректно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 17:31 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, когда ограничиваю по количеству записей (limit 100) все работает, колонки указываю явно, звездочку указал здесь, чтобы не загромождать свой пост, в названии колонок нет служебных слов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 17:33 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
test__user, твоя ситуация очень хреновая. Учитывая особые обстоятельтва (толстая шапка на табличке) я-бы предложил не выбирать 150 колонок а взять те которые нужны. Чем чёрт не шутит в этом постгрессе может ты упёрся лбом в limitation и не можешь через протокол протолкнуть 1 единицу объёма. Или какое-то binary data поле подкидывает свинью. Его тоже хорошо-бы детектировать и убрать. Работать с ним отдельным запросом типа детализации основного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 17:53 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
mayton, Вас понял, буду пробовать. Спасибо!:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 17:58 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
test__userBlazkowicz, AutoCommit не использую, по этой ссылке говорят, что использовать fetchsize(0) для выбора всех строк, использую, ошибка остается, По ссылке реккомендовали AutoCommit в false установить. Возможно из-за него и не происходит отложенной загрузки. Чтобы закоммитить запрос драйвер всё и вычитывает. Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 18:00 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
maytontest__user, попробуй SELECT .... LIMIT 100 Неудачный совет. Работать то будет, но зачем делать плохо. При многократной подаче SELECT для диапазона, определяемого OFFSET и LIMIT, данные будут читаться из базы с самого начала и потом из них выделяться количество LIMIT. То есть, работать будет медленно. maytontest__user, твоя ситуация очень хреновая. Учитывая особые обстоятельтва ничего необычного или хренового. Надо только не читать из таблицы её всю сразу (а это обычное соображение при работе с SELECT) и желательно использовать другой способ, чем LIMIT (такие есть). Чем чёрт не шутит в этом постгрессе может ты упёрся лбом в limitation и не можешь через протокол протолкнуть 1 единицу объёма. Фантазия. Так не следует работать ни с какой базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2015, 21:24 |
|
||
|
java ошибка jdbc драйвера
|
|||
|---|---|---|---|
|
#18+
вряд ли поможет, но чтобы уже быть уверенным, что все опробовано, я бы попробовал создавать stmt с параметром ResultSet.TYPE_FORWARD_ONLY И еще, можно сначала перечислить все колонки, потом половину колонок убрать. Если запрос не прошел - половину из существующих убрать, если прошел - заменить существующие теми, что убрали и тд и тп, повторять циклически пока не останется мало колонок. А потом уже смотреть конкретней что там плохого в оставшихся. А setFetchSize постгрессом вообще поддерживается? Судя по тому, что с размером 50 оно у вас не сработало - fetchSize не поддерживается. У вас же, когда fetchsize был 50 - тот же экзепшен бросался? Или бросало другой экзепшен? Я не работал с постгрессом, но эти все свободные базы - они ведь могут не полностью его поддерживать. К вопросу о том, насколько маленьким. Например, мускул поддерживает только режим setFetchSize(Integer.MIN_VALUE), что означает row-by-row fetching (хотя на практике извлекает небольшими группами - подозреваю, что решает по размеру). На практике этот режим делает tcp-трафик больше, но зато пользуясь этим режимом можно сделать полный селект очень большой таблицы, которая в память вся не помещается. Возможно, в постгрессе есть что-то подобное - гляньте в документацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2015, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39091445&tid=2124743]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 552ms |

| 0 / 0 |
