Проблема с pgpool 3.5.4 и JDBC

У меня есть pgpool 3.5.4 с включенным memcache, и я использую его для подключения к Redshift.

Я написал две простые программы, одну на Java (JDBC postgresql-9.4.1212.jre6.jar) и другую на Python (с использованием пакета psycopg2 postgres), которые просто подключаются к pgpool и выполняют простой запрос (например: select * from customer limit 10;) и я заметил странное и разное поведение. Я также выполнял запросы с помощью инструмента командной строки psql.

1) Используя JDBC с pgpool с включенным кешированием, я получаю сообщение об ошибке

2016-11-15 10:56:27: pid 31043: FATAL: Backend выдает сообщение об ошибке

2016-11-15 10:56:27: pid 31043: ДЕТАЛИ: выход из текущего сеанса из-за ошибки из бэкэнда

2016-11-15 10:56:27: pid 31043: ПОДСКАЗКА: НАЗАД Ошибка: «портал» pgpool31043 «не существует»

2) Использование JDBC с pgpool с отключенным кешированием работает

3) Используя командную строку psycopg2 или psql с pgpool с включенным или отключенным кешированием, он работает

Может кто-нибудь помочь мне понять, почему не работает только JDBC?


person Felipe Garcia    schedule 16.11.2016    source источник


Ответы (1)


JDBC использует два протокола для связи: простой протокол запросов и расширенный протокол запросов.

Однако pgpool II не очень хорошо работает с протоколом расширенных запросов.

В документации драйвера pgjdbc в github (https://github.com/pgjdbc/pgjdbc) есть параметр с именем PreferQueryMode. Чтобы решить эту проблему, просто установите для параметра seekQueryMode значение simple, и проблема исчезнет.

Я тестировал эту настройку с двумя клиентами, используя pgpool перед postgres и redshift, и она отлично работала.

person Felipe Garcia    schedule 12.01.2017
comment
Спасибо, это избавило нас от множества неприятностей! - person Amit Dash; 24.05.2017