Модуль <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 запускалась із демонстраційною конфігурацією.