エラーからunixODBCが使用されていることがわかりました.DSIは、ODBCエラーテキストが[]内のエントリでフォーマットされているため、「DSI」と呼ばれています(Example diagnostic messages )。
メッセージは「SQLGetPrivateprofileStringが見つかりませんでした」と仮定します。 SQLGetPrivateProfileStringは、odbc.iniファイルから項目を読み取るためにODBCドライバー・マネージャーが提供するAPIです。私は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があればより制限されたスレッド= 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ドライバがlibodbcinst.soにあるシンボルSQLGetPrivateProfileStringを見つけることができないように見えるので、a)あなたはlibodbcinst.soを持っていることを確認してください。b)ダイナミックリンカはこれについて知っています(これはプラットフォームによって異なります) /etc/ld.so.confとLD_LIBRARY_PATHとld.soのmanページを参照してください)c)ldd(または同等のもの)を実行して、欠落している依存関係がないようにします。
おそらく、ドライバがドライバ固有の設定を保存している場所です - ドライバによってはこれがあります。このファイルの形式が上記のodbcの形式と同じ場合は、ODBC APIに使用するファイルを指定できるので、このファイルにはSQLGetPrivateProfileStringも使用されます。
これ以降、私はコンタクトバーチカ以外のアイデアはありません。
実行中のデータベースドライバとVerticaのバージョンは何ですか?また、私は通常ODBC接続でロケールを指定しません。あなたはそれが本当に必要ですか?これは私のユーザエラーよりもローカリゼーションのバグのように思えますが、間違っている可能性があります。 – bpanulla
私は無駄にそれを削除しました。私は現在vertica_5.1.1_odbc_i386_linux verticaドライバを使用しています。私はisql文をトレースしましたが、vertica.iniファイルを探し続けます。そのようなファイルはありますか?私は気分がそれを見つけるようです –