检索PostgreSQL本机错误代码

时间:2017-08-01 07:58:59

标签: postgresql odbc unixodbc

我在SLES 12机器上安装了unixODBC-2.3.1-4.95.x86_64并编写了一些应用程序。但是我遇到了使用unixODBC在PosgreSQL中处理错误的问题。

为此,我创建了以下功能:

void checkDiag (SQLSMALLINT handleType, SQLHANDLE handle)

{

        SQLRETURN rc = SQL_ERROR;
        SQLCHAR sqlState[6];
        SQLINTEGER nError;
        SQLSMALLINT recnum = 0;
        SQLCHAR eMsg[SQL_MAX_MESSAGE_LENGTH];
        SQLCHAR nativeError[SQL_MAX_MESSAGE_LENGTH];
        while (rc != SQL_NO_DATA_FOUND)
        {
                rc = SQLGetDiagRec (handleType,
                                    handle,
                                    recnum,
                                    sqlState,
                                    &nError,
                                    eMsg,
                                    255,
                                    NULL);
                if (rc != SQL_NO_DATA_FOUND)
                {
                        SQLGetDiagField(handleType,
                                        handle,
                                        recnum,
                                        SQL_DIAG_NATIVE,
                                        nativeError,
                                        255,
                                        NULL);
                        printf("RECNUM %d\n sqlState = %s\n nError = %d\n Error Message %s\n nativeError %s \n",
                               recnum, sqlState, nError, (char *) eMsg, (char *)nativeError);
                }
                recnum++;
        }
}

我一直在尝试在 SQLGetDiagField 中使用不同的diagId变体: SQL_DIAG_MESSAGE_TEXT SQL_DIAG_NATIVE SQL_DIAG_SQLSTATE 。 我得到了一切但不是PostgreSQL错误ID。 我经常收到Postgresql错误代码id = -1

所以我的问题是:

是否可以使用unixODBC API获取本机PostgreSQL错误代码? 你能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

配置文件odbcinst.ini的内容如下:

[PostgreSQL]
Description=PostgreSQL ODBC driver
Driver=/usr/lib64/unixODBC/libodbcpsql.so
FileUsage=1

在我更改配置文件中的驱动程序条目的描述后,我能够获得PostgreSQL本机错误代码。

[PostgreSQL]
Description=PostgreSQL ODBC driver
Driver=/opt/PostgreSQL/psqlODBC/lib/psqlodbcw.so
FileUsage=1

psqlodbcw.so 库由EnterpriseDB PostgreSQL提供,可以在此处下载https://www.postgresql.org/download/linux/suse/

经过这些修改后,我可以获得原生错误代码。使用上面提供的代码,postgres错误代码值将写入 sqlState