Модуль PostgreSQL предоставляет в систему OpenSCADA поддержку БД PostgreSQL. БД PostgreSQL является мощной реляционной и многоплатформенной БД, доступной по свободной лицензии. Разработчиком БД PostgreSQL является сообщество PostgreSQL http://www.postgresql.org/. Модуль основан на библиотеке API производителя БД PostgreSQL на языке "С". Модуль позволяет выполнять действия над базами данных, таблицами и содержимым таблиц.
1. Операции над БД
Поддерживаются операции открытия и закрытия БД с возможностью создания новой БД при открытии и удаления существующей при закрытии. В терминах подсистемы "БД" системы OpenSCADA открытием БД является её регистрация для последующего использования в системе. Также поддерживается операция запроса списка таблиц в БД.
БД PostgreSQL адресуется строкой следующего типа: {host};{hostaddr};{user};{pass};{db};{port}[;{connect_timeout}]. Где:
host — Имя хоста для подключения. Если начинается с косой черты, оно указывает Unix-domain соединение вместо TCP/IP соединения, значение — это имя каталога, в котором хранится файл сокета.
hostaddr — числовой IP адрес хоста для подключения, на котором работает сервер БД PostgreSQL;
user — имя пользователя БД;
pass — пароль пользователя для доступа к БД;
bd — имя БД;
port — порт, который слушает сервер БД (по умолчанию 5432);
connect_timeout — таймаут соединения;
В случае локального доступа к БД, в пределах одного хоста, строка адреса может выглядеть следующим образом: ;;roman;123456;OpenSCADA;;10
В случае удалённого доступа к БД нужно использовать адрес хоста и порт сервера БД. Например: server.nm.org;;roman;123456;OpenSCADA;;10
2. Операции над таблицей
Поддерживаются операции открытия, закрытия таблицы с возможностью создания новой таблицы при открытии и удаления существующей при закрытии, а также запрос структуры таблицы.
3. Операции над содержимым таблицы
сканирование записей таблицы;
запрос значений указанных записей;
установка значения указанных записей;
удаление записей.
API подсистемы “БД” предполагает доступ к содержимому таблицы по значению ключевого(ых) поля(ей). Так, операция запроса записи подразумевает предварительную установку ключевых колонок объекта TConfig, по которым будет выполнен запрос. Создание новой записи(строки) производится операцией установки значений записи, которая отсутствует.
Модуль позволяет динамически изменять структуру таблиц БД PostgreSQL. Так, в случае несоответствия структуры таблицы и структуры устанавливаемой записи, структура таблицы будет приведена к требуемой структуре записи. В случае запроса значений записи и несоответствия структур записи и таблицы, будут получены только значения общих элементов записи и таблицы. Модуль не отслеживает порядок расположения элементов в записи и структуре таблицы.
Модулем реализуется механизм поддержки многоязыковых текстовых переменных. Для полей с многоязыковой текстовой переменной создаются колонки отдельных языков в формате <lang>#<FldID> (en#NAME). При этом базовая колонка содержит значение для базового языка. Колонки отдельных языков создаются по надобности, в момент сохранения в БД и при исполнении OpenSCADA в соответствующей локали. В случае отсутствия значения для конкретного языка будет использоваться значения для базового языка.
Типы элементов БД PostgreSQL следующим образом соответствуют типам элементов системы OpenSCADA:
Типы полей системы OpenSCADA
Типы полей БД PostgreSQL
TFld::String
character(n), character varying(n), text
TFld::Integer
integer, bigint, timestamp with time zone [для полей с флагом TFld::DateTimeDec]
TFld::Real
double precision
TFld::Boolean
smallint
4. Доступ к БД
БД PostgreSQL содержит механизм разделения доступа, который заключается в указании привилегий пользователя БД. В таблице ниже перечислены необходимые привилегии для полноценной работы.
Операция
Привилегия
Создание БД
CREATEDB
Создание соединения
LOGIN
Для доступа к БД права нужно разрешать непосредственно для указанной БД, а в случае создания БД нужно также разрешать доступ к системной БД "template1", используемой для подключения на стадии создания новой БД.
Кратко рассмотрим процедуру первичной настройки сервера PostgreSQL, с целью подключения к нему с помощью данного модуля:
Установка сервера СУБД PostgreSQL в виде пакета или сборкой.
Первичная инициализация сервера:
# Инициализация БД $ service postgresql initdb # Запуск БД $ service postgresql start
Разрешаем доверенный доступ из локальной или нужной подсети, отредактировав файл /var/lib/pgsql/data/pg_hba.conf на предмет установки "trust":
local all all trust host all all 127.0.0.1/32 trust
Перезапускаем сервер после редактирования доступа:
$ service postgresql restart
Устанавливаем нужный пароль для системного пользователя "postgres":
Подключаемся к серверу БД с помощью данного модуля, введя адрес БД: "localhost;;postgres;123456;test"
5. Производительность СУБД
Замер производительности БД выполнялся тестом "БД" модуля системных тестов "SystemTests" путём выполнения операций над записями структурой: <name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string>. OpenSCADA запускалась с демонстрационной конфигурацией.