<< Click to Display Table of Contents >> Navigation: Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека ODBC > Настройка ODBC коннектора в Linux |
•Особенности работы с PosgtreSQL
В качестве примера будет выполняться установка ODBC коннектора для PosgtreSQL на Ubuntu. Установка ODBC коннекторов для других баз данных и операционных систем, выполняется схожим образом - примеры настроек можно найти в Интернете.
Примечание. Если БД у вас уже установлена или находится на другом компьютере, то данный шаг можно пропустить.
Для установки 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 для 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.
Следует помнить, что 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