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

#odbc #vertica

#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
  

Ответ №1:

Принятый ответ описывает способ подключения к 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);
  

Комментарии:

1. Вероятно, это правильный ответ, но я больше не работаю с vertica, поэтому не могу проверить, работает ли он. Может быть, кто-нибудь еще может это подтвердить?

2. Привет @Ramy, я протестировал это на упомянутой версии драйвера Vertica ODBC, на самом деле он регулярно запускается как часть сборки интеграции с тестовой средой Vertica.

3. Я, честно говоря, не уверен, как это должно работать (с точки зрения stackoverflow). Ответ, который я принял, был правильным на тот момент. Я не знаю, возможно, диск vertica изменился в какой-то момент после того, как я принял первоначальный ответ.

4. У меня это тоже сработало. Просто чтобы быть предельно понятным для новичков вроде меня, моя часть драйвера выглядела следующим образом: Driver=/usr/local/opt/vertica-mac64/lib64/libverticaodbc.dylib; . При необходимости, конечно, измените.

5. Спасибо @Chords, это устранило проблему, с которой я столкнулся!

Ответ №2:

Я тоже не видел никакого способа использовать 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
  

Комментарии:

1. смотрите мой ответ ниже о том, как это сделать со строкой подключения, а не с DSN

Ответ №3:

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

  • Windows:

    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 пары в строке подключения, похоже, чувствительны к регистру.)

Ответ №4:

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

Комментарии:

1. Это скорее комментарий, чем ответ.

Ответ №5:

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

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

Комментарии:

1. Еще один вопрос, называется ли ваш экземпляр базы данных «vertica» или вы пытались указать тип базы данных.

2. да, экземпляр DB называется «vertica»

3. Просто еще один быстрый вопрос. Убедитесь, что на вашем компьютере установлен последний драйвер vertica. Я просматриваю некоторую документацию, чтобы посмотреть, вижу ли я что-нибудь.

Ответ №6:

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

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

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

«jdbc: vertica: // сервер: порт / БД?пользователь=имяпользователяипароль=passwordamp;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_MACHINESOFTWAREODBCODBC.INIvmartdb). 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,amp;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 ';' 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,amp;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.