PostgreSQL: ошибка при повторном использовании подготовленного оператора в postgresql

Описание: у меня проблема с выполнением подготовленного оператора более одного раза с параметрами привязки. 1-й раз, когда он выполняет корректно, затем сбрасывает параметры, оператор, и когда я пытаюсь выполнить такой же подготовленный оператор, в следующий раз, он не может выдать ошибку, подобную этой.

Детали: я выполняю подготовленный оператор с привязкой некоторых параметров, после выполнения я отдыхаю подготовленный оператор и отменяю привязку параметров. при попытке выполнить тот же подготовленный оператор выдает ошибку:"27:Ошибка при получении числового атрибута: ColAttribute для этого типа еще не реализован". Я использую библиотеку libodbC++. когда я отлаживаю, в этой строке происходит ошибка (строка кодаlibodbC++)

Строка: ResultSet * rs = ODBCXX_OPERATOR_NEW_DEBUG (FILE, LINE) ResultSet (this, hstmt_, hideMe);

Ошибка: "27: Ошибка при получении числового атрибута: ColAttribute для этого типа еще не реализован"

Номер версии PostgreSQL, который вы используете:

Как вы установили PostgreSQL:PostgreSQL 9.3.5, скомпилированный Visual C++ build 1600, 64-bit

Изменения, внесенные в настройки в файле postgresql.conf: Нет

Операционная система и версия: Windows 8.1 (64-разрядная версия)

Какую программу вы используете для подключения к PostgreSQL: библиотека ODBC 3.5 (libodbC++)

Есть ли что-то важное или необычное в логах сервера PostgreSQL?: Нет

Для вопросов о любой ошибке:

Что вы делали, когда произошла ошибка / как вызвать ошибку:"27: Ошибка при получении числового атрибута: ColAttribute для этого типа еще не реализован"

Спасибо и С уважением, Балакришна

1 ответ

Проблема в том, как libodbC++ обрабатывает параметры и запросы. Есть два способа исправить это:

 1. Upgrade the libodbc++ to use 7.4(V3) protocol.
 2. If you are using old libodbc++, then change disable the UseServerSidePrepare parameter in odbc configuration files.

Объяснение для UseServerSidePrepare = 0 в конфигурации odbc:

Psqlodbc контролирует больше, чем просто использовать безымянные или именованные планы на сервере. При UseServerSidePrepare = 0 параметры полностью обрабатываются в драйвере, заменяя маркеры параметров значениями в самом запросе.

Примечание: вполне могут быть приложения, в которых UseServerSidePrepare=1 снижает производительность, особенно при работе на серверах< 9.2. ИМХО по умолчанию все еще лучше, вы можете отключить его, если придется.

PS: я знаю, что вопрос был задан несколько лет назад, но недавно я столкнулся с той же проблемой, и мне было очень мало ресурсов, которые действительно работали.

Другие вопросы по тегам