2017-01-17 12 views
0

у меня есть тонны кода, который выглядит следующим образом:java.Statement.executeQuery() создает подготовленное заявление, когда он не должен

conn.createStatement().executeQuery("SELECT a, b, c FROM foo;"); 

В моем Postgres журналах я вижу тонны этих линий:

parse <unnamed>: SELECT a, b, c FROM foo; 
bind <unnamed>: SELECT a, b, c FROM foo; 
execute <unnamed>: SELECT a, b, c FROM foo; 

Это на производственном сервере.

На моем тестовом сервере, я вижу:

execute <unnamed>: SELECT a, b, c FROM foo; 

Что я ожидал увидеть на сервере.

Почему он пытается создать подготовленный оператор для моего простого запроса выбора?


Некоторые фона:

  • Mirth 3.4.1, подключение к Postgres 9.5
  • Мой тестовый случай в считывающем канале базы данных с "Использовать Javascript" галочка.
  • Но, из журналов, кажется, что каждый запрос выполняет синтаксический анализ/связывание/выполнение. Даже внутренние запросы, которые делает Мирт.
+0

Это может быть разница в настройках уровня журнала – asit

+0

Вы предлагаете, чтобы на самом деле не создавались подготовленные операторы, но простые настройки уровня журнала дают более подробный вывод? Если бы это было так, я бы не запускал «SELECT a, b, c FROM foo;» из командной строки postgres выдает тот же результат в журнале? Это не. – Jason

+0

Эй, это может быть ответ (я должен буду это проверить завтра): http://stackoverflow.com/questions/6741530/any-way-to-not-use-server-side-prepared-statements- в-PostgreSQL – Jason

ответ

1

Да, драйвер PostgreSQL JDBC использует расширенный протокол (синтаксический анализ/привязывать/выполнение), если не заставить протокол версии 2.

Обычно влияние на производительность мала, поскольку сообщения протокола, как правило, приходят в один сетевой пакет, и это не должно быть проблемой.

Я бы дважды подумал, хорошо проверил и сравнил разницу в производительности перед тем, как форсировать протокол версии 2. Эта старая версия протокола не очень хорошо поддерживается и начала пахнуть смешно. Серьезно считается, что он отказался от поддержки для этого (см. this message для недавнего обсуждения).