Назад | Перейти на главную страницу

Настройка postgresql12-odbc для использования правильной версии протокола

У меня есть коробка Centos 7 с установленными unixODBC 2.3.1 и postgresql-odbc 12.02, которая подключается к серверу PostgreSQL, также работающему под управлением v12.

Хотя я считаю, что настроил ODBC для использования протокола v12.0, похоже, что это не так. При подключении к серверу и попытке получить список столбцов в таблице я получаю сообщение об ошибке: column c.relhasoids does not exist. Этот столбец был удален из pg_catalog.pg_class в PostgreSQL v12.

postgresql-odbc был специально обновлен до не использовать этот столбец когда протокол v12, поэтому я могу только предположить, что нет.

у меня есть Protocol = 12.0 в моем /etc/odbcinst.ini и если я убегу strace isql my-connector Я вижу, как он загружает библиотеки postgresql12 из /usr/pgsql-12 как настроено.

Я в тупике!

# yum list installed | grep -i -e 'odbc' -e 'postgresql'
postgresql12-libs.x86_64               12.3-5PGDG.rhel7                @pgdg12  
postgresql12-odbc.x86_64               12.02.0000-1PGDG.rhel7          @pgdg-common
unixODBC.x86_64                        2.3.1-14.el7                    @base    
unixODBC-devel.x86_64                  2.3.1-14.el7                    @base  
# cat /etc/odbc.ini
[my-connector]
Description = My PG connection
Driver = PostgreSQL12
Database = mydb
Servername = mydatabase.example.com
UserName = myself
Password = mypassword
Port = 25061
Protocol = 12.0
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
SSLMode = require
UseServerSidePrepare = No
# cat /etc/odbcinst.ini
[PostgreSQL12]
Description=ODBC for PostgreSQL
Setup=/usr/lib/libodbcpsqlS.so
Setup64=/usr/lib64/libodbcpsqlS.so
Driver=/usr/pgsql-12/lib/psqlodbcw.so
Driver64=/usr/pgsql-12/lib/psqlodbcw.so
FileUsage=1
# isql my-connector -v -3
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select id from roles where name = 'admin';
+------------+
| id         |
+------------+
| 2          |
+------------+
SQLRowCount returns 1
1 rows fetched
SQL> help roles
[HY000]Error while executing the query
[42703]ERROR: column c.relhasoids does not exist
[ISQL]ERROR: Could not SQLColumns