Those are error messages and solutions found after lots of trials and errors. I am mostly using python with Vertica, some some solutions might thus be python specific, but most should be generic enough.
[HY000] [unixODBC][Vertica][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function. (11560) (SQLDriverConnect)
The ODBC connection does not find a properly defined DSN. Reasons include:
- Path not existing in one of the odbc.ini or odbcinst.ini files (check mostly ODBCInstLib, Driver, Driver64).
[22001] [Vertica][ODBC] (10170) String data right truncation on data from data source: String data is too big for the driver’s data buffer. (10170) (SQLPutData)
This is a unicode issue. Reasons might be:
- Old pyodbc which does not handle UTF-8 properly (try to use version 3+)
- Vertica’s VARCHAR length is given in bytes, not character. So if you have UTF8 characters in a string, you might go above the limit without noticing. Eg. a VARCHAR(1) can hold ‘0’ but not ‘€’.
- Pyodbc does not handle unicode properly. If you are using python, encode in UTF-8.
[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)
The DSN used does not exist. Reasons include:
- Typo in the DSN in your code (you are asking for a DSN not defined in odbc.ini).
- odbc.ini file syntax invalid (for instance closing square bracket forgotten).
- DSN not defined in the used odbc.ini file.
- Wrong odbc.ini file used, hence DSN not found. This can happen if a $HOME/.odbc.ini file, often created by default, exists.
- The odbc.ini is not in the expected path (/etc/odbc.ini). Pointing the ODBCINI environment variable to the right path might work.
- The odbc.ini file references a Driver in the the relevant DSN section which is not defined in /etc/odbcinst.ini.
[HY000] [unixODBC][DSI] The error message NoSQLGetPrivateProfileString could not be found in the en-US locale. Check that /en-US/ODBCMessages.xml exists. (-1) (SQLDriverConnect)
Vertica needs some extra specifications in either /etc/vertica.ini (default), or in the file pointed to by the VERTICAINI environment variable:
[Driver] ErrorMessagesPath = /opt/vertica/lib64/ ODBCInstLib = /usr/lib/x86_64-linux-gnu/libodbcinst.so DriverManagerEncoding=UTF-16
Usually I just add this to odbc.ini and points VERTICAINI to it.
pyodbc.Error: (‘H’, ‘[H] [unixODBC][ (4294967295) (SQLDriverConnectW)’)
You are using an old version of pyodbc. Upgrade system wide or create a virtualenv and pip install pyodbc.
this was a HUGE help, thank you so much for taking the time to post up these tips
Glad to see that my pains helped alleviate other’s pain!
Pingback: Installing HP Vertica with ODBC and Python plugins on Ubuntu 14.04 | nixdaddy