如何获取 Linux 服务器中安装的 Postgres ODBC 驱动程序版本?

How to grab Postgres ODBC Driver version installed in a Linux Server?

我试图通过在 /etc/odbcinst.ini 文件中列出驱动程序来获取安装在 linux 服务器中的 odbc 驱动程序版本,但我注意到 DriverODBCVer 参数不可用对于 Postgres 驱动程序

[PostgreSQL]
Description =ODBC for PostgreSQL
Driver=/usr/lib/psqlodbcw.so
Setup=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib64/psqlodbcw.so
Setup64=/usr/lib64/libodbcpsqlS.so
FileUsage=1

我已经尝试使用 lsmod 并从 /proc/modules 中获取,但没有成功。我基本上尝试了与此相关的所有主题

有什么方法可以获取安装在 linux 服务器上并且当前配置为默认使用的 postgres ODBC 驱动程序?为了提供一些上下文,其中一个进程(returns 驱动程序信息)为我们提供了与应该安装的版本不同的版本。

谢谢!

似乎唯一的方法是编写一个 C 程序,用 SQL_DRIVER_VER 调用 SQLGetInfo 函数作为 InfoType

这是一个适合我的最小程序:

#include <sql.h>
#include <sqlext.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    SQLHENV henv;
    SQLHDBC hdbc;
    char version[25];
    SQLSMALLINT version_size;

    (void) SQLAllocHandle(SQL_HANDLE_ENV,
                          SQL_NULL_HANDLE,
                          &henv);

    (void) SQLSetEnvAttr(henv,
                         SQL_ATTR_ODBC_VERSION,
                         (SQLPOINTER)SQL_OV_ODBC3,
                         0);

    (void) SQLAllocHandle(SQL_HANDLE_DBC,
                          henv,
                          &hdbc);

    (void) SQLGetInfo(hdbc,
                      SQL_DRIVER_VER,
                      &version,
                      25,
                      &version_size);

    write(1, version, strlen(version));
    write(1, "\n", 1);

    return 0;
}

这是我构建和 运行 它的方式:

> gcc -Wall -o odbcversion -Wl,-rpath,/usr/pgsql-14/lib odbcversion.c /usr/pgsql-14/lib/psqlodbc.so
> ./odbcversion
13.02.0000

在 Python 中,我们可以使用 pyodbc 的 .getinfo() 方法来检索驱动程序版本(以及许多其他内容):

import pyodbc

connection_string = (
    "DRIVER=PostgreSQL Unicode(x64);"
    "SERVER=192.168.0.199;"
    "UID=scott;PWD=tiger;"
    "DATABASE=test;"
)
cnxn = pyodbc.connect(connection_string)

print(cnxn.getinfo(pyodbc.SQL_DRIVER_VER))
# 13.02.0000