Кто-нибудь знает формат строки подключения ODBC для Vertica?

Я использую следующее:

DRIVER={Vertica ODBC Driver 4.1};
SERVER=lnxtabdb01.xxxx.com;
PORT=5433;
DATABASE=vertica;
USER=dbadmin;
PASSWORD=vertica;
OPTION=3;

Я получаю эту ошибку, и я просто хотел убедиться, что моя строка подключения была крутой, прежде чем проверять другие возможные проблемы.

ошибка:

EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [28000] FATAL: no Vertica user name specified in startup packet

ОБНОВЛЕНИЕ: пока я просто использую имя источника системных данных в Windows Vista, которое я могу использовать. Но я все еще хотел бы знать, есть ли строка подключения odbc, чтобы мне не приходилось настраивать ее на каждой машине, которая будет подключаться к Vertica DB таким способом.

ну, я попробовал строку подключения postgresql, которая выглядит так:

Host=lnxtabdb01.xxxx.com;
Port=5433;
Database=vertica;
User ID=dbadmin;
Password=vertica;
Pooling=true;
OPTION=3;
Min Pool Size=0;
Max Pool Size=100;
Connection Lifetime=0;

теперь я получаю это:

EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

6 ответов

Решение

Я тоже не видел никакого способа использовать ODBC без DSN. Вот мои настройки DSN для моей рабочей станции Linux.

[VerticaDSN]
Description = VerticaDSN ODBC driver
Driver = /opt/vertica/lib64//libverticaodbc_unixodbc.so
Database = Retail
Servername = localhost
UserName = vertica
Password =
Port = 5433

Принятый ответ описывает способ связи с Vertica ODBC driver используя систему DSN, Можно подключиться, используя только строку подключения, чтобы напрямую настроить соединение с драйвером. Следующий образец строки подключения был протестирован с Vertica ODBC Client Driver v6.1.2:

Driver=Vertica;Server=MyVerticaServer;Port=5433;Database=MyVerticaDB;UID=foo;PWD=bar

Порт не является обязательным:

Driver=Vertica;Server=MyVerticaServer;Database=MyVerticaDB;UID=foo;PWD=bar

Или, если вы делаете это в.NET, как я, вы можете использовать это для форматирования строки подключения из необходимых параметров:

var connectionString = string.Format(
            "Driver=Vertica;Server={0};{1}Database={2};UID={3};PWD={4}",
            server,
            port == null ? string.Empty : string.Format("Port={0};", port),
            database,
            username,
            password);

Вы можете подключиться к источнику данных Vertica ODBC без настройки / указания имени источника данных (DSN), используя строку подключения, которая включает следующее:

  • Окна:

    Driver=Vertica ODBC Driver 4.1;Servername=hostname;Port=5433;Database=vertica;UserName=dbadmin;Password=sekret

  • Linux / Unix

    Driver=Vertica;Servername=hostname;Port=5433;Database=vertica;UserName=dbadmin;Password=sekret

Заменить каждый курсив value с теми, которые соответствуют вашей среде. (Обратите внимание name=value пары в строке подключения, похоже, чувствительны к регистру.)

При использовании ODBC я всегда использовал Windows и настраивал DSN. Однако мое единственное предложение, и это было бы общим предложением для многих различных типов проблем в Vertica, было бы попробовать формат ODBC для PostgreSQL.

В основном все, что не скрыто, основано на PostgreSQL, особенно синтаксис и функции SQL. Поэтому я бы пошел на вышеупомянутый сайт http://www.connectionstrings.com/ и посмотрел, как это делает PostgreSQL.

Вы смотрели на http://www.connectionstrings.com/? В нем нет конкретной базы данных Vertica, но есть десятки других типов баз данных, которые могут быть достаточно похожи на vertica, чтобы они хорошо переводились....

Хорошо, я просматриваю документацию Vertica и не вижу никакого способа соединения с ODBC без создания DSN. JDBC, похоже, другое дело. Если есть способ сделать это, я не вижу этого.

Похоже, проблема в том, что (если у вас есть драйвер) система не знает, что строка подключения должна обрабатываться драйвером Vertica. В DSN это уже указано, поэтому это работает (мое обоснованное предположение).

Вот пример, который они дают для JDBC:

"JDBC: Vertica: // сервер: порт / дб пользователя = имя пользователя и пароль = пароль и SSL = истина"

Строка подключения JDBC, кажется, сообщает коду, что она должна использовать Vertica.

Позвольте мне опубликовать часть соответствующего документа (простите за форматирование) относительно ODBC:

Параметры DSN

Параметры в следующих таблицах являются общими для всех записей DSN пользователя и системы. Приведенные примеры предназначены для клиентов Windows.

Чтобы изменить параметры DSN:

* UNIX and Linux users can edit the odbc.ini file. (See Creating an ODBC DSN for Linux and Solaris Clients.) The location of this file is specific to the driver manager.
* Windows users can edit the DSN parameters directly by opening the DSN entry in the Windows registry (for example, at HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\vmartdb). However, the Vertica-preferred method is to follow the steps in Creating an ODBC DSN for Windows Clients.
* Parameters can be set while making the connection using SQLDriverConnect().

  sqlRet = SQLDriverConnect(sql_hDBC, 0, (SQLCHAR*)"DSN=VerticaSQL;BinaryDataTransfer=1",

  SQL_NTS, szDNS, 1024,&nSize, SQL_DRIVER_NOPROMPT);



  Note: In the connection string ';' is a reserved symbol. If you need to set multiple parameters as part of ConnSettings parameter use '%3B' in place of ';'. Also use '+' instead of spaces.

  For Example:

  sqlRet = SQLDriverConnect(sql_hDBC, 0, (SQLCHAR*)"DSN=VerticaSQL;BinaryDataTransfer=1;ConnSettings=

  set+search_path+to+a,b,c%3 Bset+locale=ch;SSLMode=prefer", SQL_NTS,

  szDNS, 1024,&nSize, SQL_DRIVER_NOPROMPT);



* Parameters can also be set and retrieved after the connection has been made using SQLConnect(). Parameters can be set and retrieved using SQLSetConnectAttr(),SQLSetStmtAttr(), SQLGetConnectAttr() and SQLGetStmtAttr() API calls. 
Другие вопросы по тегам