кто-нибудь знает формат строки подключения 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.

ну, я попробовал строку подключения 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

person Ramy    schedule 27.04.2011    source источник


Ответы (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
person Al W    schedule 17.06.2011
comment
см. мой ответ ниже о том, как это сделать с помощью строки подключения, а не DSN - person Jon G; 10.07.2013

Принятый ответ описывает способ подключения к 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);
person Jon G    schedule 02.07.2013
comment
Вероятно, это правильный ответ, но я больше не работаю с vertica, поэтому не могу проверить, работает ли она. Может быть, кто-то еще может это проверить? - person Ramy; 10.07.2013
comment
Привет @Ramy, я проверил это на упомянутой версии драйвера ODBC Vertica, на самом деле он регулярно запускается как часть сборки интеграции с тестовой средой Vertica. - person Jon G; 10.07.2013
comment
Честно говоря, я не уверен, как это должно работать (с точки зрения stackoverflow). Ответ, который я принял, был правильным ответом в то время. Я не знаю, может быть, диск vertica изменился в какой-то момент после того, как я принял первоначальный ответ. - person Ramy; 15.04.2014
comment
Это сработало и для меня. Просто для ясности для таких нубов, как я, моя часть драйвера выглядела так: Driver=/usr/local/opt/vertica-mac64/lib64/libverticaodbc.dylib;. Подправить, как надо, конечно. - person Chords; 13.05.2014
comment
Спасибо @Chords, это прояснило мою проблему! - person RyanCacophony; 28.06.2014
comment
Это прекрасно работает и должно быть принятым ответом! Спасибо! - person noizybrain; 12.08.2018
comment
Приведет ли это к более быстрому времени запроса, чем через системный dsn odbc? - person excelguy; 18.12.2018

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

  • Окна:

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

  • Линукс/Юникс

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

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

person Danny Whitt    schedule 07.02.2012

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

person thepip3r    schedule 28.04.2011
comment
Это скорее комментарий, чем ответ. - person Kermit; 29.10.2013

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

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

person geoffrobinson    schedule 28.04.2011
comment
Другой вопрос: ваш экземпляр базы данных называется vertica или вы пытались указать тип базы данных. - person geoffrobinson; 28.04.2011
comment
да, экземпляр БД называется vertica - person Ramy; 28.04.2011
comment
Просто еще один быстрый вопрос. Убедитесь, что на вашем компьютере установлена ​​последняя версия драйвера vertica. Я просматриваю некоторую документацию, чтобы увидеть, вижу ли я что-нибудь. - person geoffrobinson; 28.04.2011

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

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

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

"jdbc:vertica://server:port/db?user=username&password=password&ssl=true"

Строка подключения 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. 
person geoffrobinson    schedule 28.04.2011