Сниффер (Wireshark) показал следующее:
1) При jdbc 9.4-1201-jdbc41 каждый раз отправляется один запрос. И каждый раз из БД приходит полный корректный ответ.
Выглядит запрос в дампе сниффера так:
Type: Parse
Length: 169
Statement:
Query: select user0_."id" as id1_0_, user0_."testArray" as testArra2_0_, user0_."testTimestamp" as testTime3_0_ from "public"."users" user0_ where user0_."id" in (2)
Parameters: 0
2) При более старших версиях jdbc вначале (при первых попытках) идёт такой же запрос, только с указанием Statement:
Type: Parse
Length: 169
Statement: S_2
Query: select user0_."id" as id1_0_, user0_."testArray" as testArra2_0_, user0_."testTimestamp" as testTime3_0_ from "public"."users" user0_ where user0_."id" in (2)
Parameters: 0
3) В ситуации, когда виден баг, jdbc отправляет уже не вышеприведённый запрос, а следующее (как я понял - несколько команд за раз):
Type: Bind
Length: 21
Portal:
Statement: S_2
Parameter formats: 0
Parameter values: 0
Result formats: 3
Format: Binary (1)
Format: Binary (1)
Format: Binary (1)
Type: Execute
Length: 9
Portal:
Returns: all rows
Type: Sync
Length: 4
И в ответ получает данные, которые глазами в дампе оценить уже сложно - идут не текстом.
P.S.: Проблема решилась выставлением параметра jdbc драйвера preparedStatementCacheQueries в 0. Отключение кеша привело к тому, что драйвер перестал использовать prepared statements при запросах вообще и каждый раз отправляет запрос полностью, как в версии 9.4-1201-jdbc41. Так себе решение, на самом деле, т.к. надо будет пробовать еще, что получится, если я захочу сам использовать prepared statements.