从错误信息中我们可以看到您正在使用unixODBC,我猜“DSI”是Vertica在ODBC错误文本中的称呼,因为[]中的条目从左到右按路径排列不同组件(请参见示例诊断消息)。
我猜那个消息应该是“No SQLGetPrivateprofileString could be found”。SQLGetPrivateProfileString是由ODBC驱动程序管理器提供的API,用于从odbc.ini文件中读取条目。我认为它应该在libodbcinst.so共享对象中找到,但是一些发行版(例如Ubuntu/Debian)会从共享对象中剥离符号,因此很难验证这一点。
在您的DSN中,驱动程序是文件“/opt/vertica/lib/libverticaodbc_unixodbc.so”。虽然通常更习惯于在odbc.ini中命名驱动程序并向odbcinst.ini文件添加条目,但您的DSN看起来还不错。例如:
/etc/odbcinst.ini:
[Easysoft ODBC-SQL Server SSL]
Driver=/usr/local/easysoft/sqlserver/lib/libessqlsrv.so
Setup=/usr/local/easysoft/sqlserver/lib/libessqlsrvS.so
Threading=0
FileUsage=1
DontDLClose=1
/etc/odbc.ini:
[SQLSERVER_SAMPLE_SSL]
Driver=Easysoft ODBC-SQL Server SSL
Description=Easysoft SQL Server ODBC driver
.
.
在上面的例子中,这样做可以让您指定与驱动程序相关的其他选项,例如线程(快速搜索表明Vertica可以使用Threading=1,如果使用线程程序,则限制较少)和DontDLClose。但是,正如我所说,现在应该按照您现有的方式工作。
现在下一步取决于您的平台,我没有注意到您是否指定了一个。您需要检查您的ODBC驱动程序的共享对象并查看它依赖于什么。在Linux上,您可以执行以下操作:
$ ldd /usr/local/easysoft/sqlserver/lib/libessqlsrv.so
linux-gate.so.1 => (0xb76ff000)
libodbcinst.so.1 => /usr/lib/libodbcinst.so.1 (0xb75fe000)
libesextra_r.so => /usr/local/easysoft/lib/libesextra_r.so (0xb75fb000)
libessupp_r.so => /usr/local/easysoft/lib/libessupp_r.so (0xb75de000)
libeslicshr_r.so => /usr/local/easysoft/lib/libeslicshr_r.so (0xb75cd000)
libestdscrypt.so => /usr/local/easysoft/lib/libestdscrypt.so (0xb75c8000)
libm.so.6 => /lib/libm.so.6 (0xb75a2000)
libc.so.6 => /lib/libc.so.6 (0xb7445000)
libltdl.so.7 => /usr/lib/libltdl.so.7 (0xb743b000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7421000)
/lib/ld-linux.so.2 (0xb7700000)
libdl.so.2 => /lib/libdl.so.2 (0xb741d000)
这表明该ODBC驱动程序依赖于libodbcinst.so.1,并且动态链接器找到了它。我想你的Vertica驱动程序在这方面看起来应该类似,尽管可能是Vertica驱动程序在首次加载时自己动态加载此共享对象。无论哪种方式,看起来Vertica驱动程序无法找到符号SQLGetPrivateProfileString,而该符号在libodbcinst.so中,因此请确保a)您有libodbcinst.so b)您的动态链接器知道它(如何完成取决于您的平台-在Linux上,请参见/ etc / ld.so.conf和LD_LIBRARY_PATH以及ld.so的man页面)c)在其上运行ldd(或等效物)以确保没有缺少的依赖项。
vertica.ini文件可能是驱动程序存储特定于驱动程序的配置的位置-某些驱动程序会这样做。如果此文件的格式与上面的ODBC文件相同,则它也可以使用SQLGetPrivateProfileString来告诉ODBC API要使用哪个文件。
除此之外,我没有更多的想法,建议联系Vertica。