Настройка ODBC коннектора в Linux

<< Click to Display Table of Contents >>

Navigation:  Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека ODBC >

Настройка ODBC коннектора в Linux

Установка PosgtreSQL

Установка ODBC коннектора

Особенности работы с PosgtreSQL

Приложения

В качестве примера будет выполняться установка ODBC коннектора для PosgtreSQL на Ubuntu. Установка ODBC коннекторов для других баз данных и операционных систем, выполняется схожим образом - примеры настроек можно найти в Интернете.

Установка PostgreSQL

Примечание. Если БД у вас уже установлена или находится на другом компьютере, то данный шаг можно пропустить.

Для установки PostgreSQL, сначала выполним обновления списка пакетов командой

sudo apt update

Затем запускаем команду инсталляции PostgreSQL:

sudo apt -y install postgresql

Затем рекомендуется посмотреть список запущенных служб выполнив команду:

systemctl list-units --type=service --state=running | grep postgre

В списке должна появится служба Postgre (она может иметь различные имена).

Если настройка и администрирование базы будет идти локально, то следует установить специальное ПО - например PGAdmin. Для этого выполним команду

sudo apt install pgadmin4

Если инсталляция не выполняется, то установите утилиту curl:

sudo apt install curl

Установите открытый ключ репозитория:

curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add

Создайте файл конфигурации репозитория:

sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'

А затем выполните команду инсталляции PGadmin снова.

Для задания пароля пользователя postgres используйте команды:

sudo -u postgres psql postgres

В psql используйте команду

\password postgres

А затем задать новый пароль, в нашем примере пароль будет также postgres. Затем можно подключаться к СУБД из PGAdmin и создавать базы и таблицы.

Примечание. Следует помнить, что по умолчанию PostgreSQL позволяет подключаться только локально. Для внешних подключений нужно настроить конфигурацию в файлах pg_hba.conf и postgresql.conf - инструкции по настройке можно найти в интернете.

 

Установка ODBC коннектора

Устанавливаем пакет ODBC для Unix систем командой:

sudo apt install unixodbc

Устанавливаем драйвер ODBC для PostgreSQL командой:

sudo apt-get install odbc-postgresql

Проверить что драйвер корректно установился можно командой:

odbcinst -q -d

Должен появится список установленных в системе драйверов ODBC, в случае с PostgreSQL:

[PostgreSQL ANSI]

[PostgreSQL Unicode]

После установки нужно найти файл /etc/odbc.ini. В данный файл нужно прописать:

[PostConnect]

Description = PostgreSQL ODBC driver

Driver = PostgreSQL Unicode

Database = Example

Servername = localhost

Port = 5432              

Где:

PostConnect - имя коннектора. Это имя нужно будет использовать в скрипте в качестве параметра host.

Driver - имя драйвера ODBC который будет использоваться. В данном случае это PostgreSQL Unicode.

Database - имя базы данных. В данном случае - Example.

Servername - имя сервера или IP адрес.

Port - порт подключения к серверу.

Редактировать данный файл нужно под sudo в самом терминале командой:

sudo nano /etc/odbc.ini

Также в структуре файла могут присутствовать имя пользователя и пароль, необходимость трассировки и т.д.

Затем нужно проверить что ODBC настроен и связь установлена используя команду:

isql -v ИмяODBC Логин Пароль

В нашем случае это будет:

isql -v PostConnect postgres postgres

В результате должно вывестись Connected!

Примечание. Обратите внимание, что этой командой вы перешли в режим консоли SQL. Чтобы снова войти в режим командной строки терминала нажмите CTRL + C.

Если выдается ошибка подключения вида:

Can't open lib 'psqlodbcw.so' : file not found

то в этом случае нужно открыть файл /etc/odbcinst.ini и в полях Driver и Setup указать полные пути к файлам. Обычно они находятся по пути

/lib/x86_64-linux-gnu/odbc/

Если прописывание в odbcinst.ini не дает эффекта и ошибка повторяется, то можно прописать полный путь к библиотеке в файле odbc.ini в поле Driver например:

[PostConnect]

Description = PostgreSQL ODBC driver

Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so

Database = Example

Servername = 192.168.198.133

Port = 5432

Очень часто возникает ошибка вида:

[unixODBC][Driver Manager]Data source name not found and no default driver specified

Если вы указываете правильное имя ODBC-коннектор, то попробуйте выполнить команду под sudo. Если, в этом случае, запуск будет успешным, то нужно создать символьные ссылки на файлы /etc/odbc.ini и /etc/odbcinst.ini в папке:

usr/local/etc

Для этого выполните команды:

sudo ln -s /etc/odbc.ini /usr/local/etc/odbc.ini

sudo ln -s /etc/odbcinst.ini /usr/local/etc/odbcinst.ini

Затем снова запустите команду isql под обычным пользователем - если теперь ошибки нет, и подключение успешно, то можно переходить к проверке работы OPC.

В настройках подключения примера, в данном случае будут следующие настройки:

local host = "PostConnect"

local login ="postgres"

local password = "postgres"

На этом установка ODBC на Ubuntu завершена - можно пробовать запускать конфигурацию OPC сервера. Для анализа корректности работы, включите запись лога в настройках конфигурации OPC сервера, логи пишутся в папку serverlogs.

 

Особенности работы с PosgtreSQL

Следует помнить, что PosgreSQL имеет не очевидные особенности с именованием таблиц. Например, если вы назовете таблицу ArchiveValues и будете пытаться добавлять в нее значения SQL запросом:

local SQLQuery="INSERT INTO ArchiveValues VALUES "; --header of query  

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

local SQLQuery="INSERT INTO \"ArchiveValues\" VALUES "; --header of query  

Т.е. перед ковычкой нужно поставить маркирующий символ "обратный слэш" - иначе он будет воспринят как конец строкового значения.

Если же таблица будет называться archivevalues, то указанный ранее запрос будет работать корректно, даже несмотря на расхождение в регистре. Учитывайте данную особенность при именовании таблиц или всегда для PostgreSQL оборачивайте имя таблицы в SQL запросе в ковычки.

Также при повторении нашего примера ODBC_Example, помните про чередование и типы данных столбцов - подробнее описано в разделе по этому примеру.

 

Приложения

Примеры настройки файлов из данного примера.

odbc.ini

[PostConnect]

Description = PostgreSQL ODBC driver

Driver = PostgreSQL Unicode

Database = postgres

Servername = localhost

Port = 5432

 

odbcinst.ini

[PostgreSQL ANSI]

Description=PostgreSQL ODBC driver (ANSI version)

Driver=psqlodbca.so

Setup=libodbcpsqlS.so

Debug=0

CommLog=1

UsageCount=1

 

[PostgreSQL Unicode]

Description=PostgreSQL ODBC driver (Unicode version)

Driver=psqlodbcw.so

Setup=libodbcpsqlS.so

Debug=0

CommLog=1

UsageCount=1