From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Modules/PostgreSQL and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська
Модуль Ім'я Версія Ліцензія Джерело Мови Платформи Тип Автор Опис
PostgreSQL БД PostgreSQL 2.5 GPL2 bd_PostgreSQL.so en,uk,ru,de x86,x86_64,ARM БД Роман Савоченко
  Максим Лисенко (2010-2011)
Модуль БД. Надає підтримку СУБД PostgreSQL.

Модуль надає до OpenSCADA підтримку СУБД PostgreSQL, яка є потужною реляційною та багатоплатформеною СУБД, доступною за вільною ліцензією та розроблюваною співтовариством PostgreSQL. Модуль засновано на бібліотеці API виробника СУБД PostgreSQL на мові "С" та дозволяє здійснювати дії над базами даних, таблицями та вмістом таблиць.

1 Операції над БД

Підтримуються операції відкриття та закриття БД, з можливістю створення нової БД при відкритті та видалення існуючої при закритті. У термінах підсистеми "БД" OpenSCADA, відкриттям БД є її реєстрація для наступного використання програмою. Також, підтримується операція запиту переліку таблиць у БД.

СУБД PostgreSQL адресується рядком наступного типу: {host};{hostaddr};{user};{pass};{db};{port}[;{connect_timeout}]. Де:

  • host — ім'я хосту на якому працює сервер СУБД PostgreSQL. Якщо починається зі слеша ('/'), то використовується UNIX-сокет замість TCP; значення це - ім'я каталогу де зберігається файл сокету;
  • hostaddr — чисельна адреса хосту PostgreSQL сервера, яка має бути у форматі IPv4 стандарту, як то 172.28.40.9; Ви також можете використовувати IPv6, якщо він підтримується; якщо цей параметр вказано непорожнім то завжди використовуються TCP/IP підключення;
  • user — ім'я користувача БД;
  • pass — пароль користувача для доступу до БД;
  • bd — ім'я БД;
  • port — порт, який слухає сервер СУБД (по замовченню 5432);
  • connect_timeout — час очікування з'єднання, у секундах.

У випадку локального доступу до СУБД, у межах одного хосту, рядок адреси може мати наступний вигляд: ;;user;password;OpenSCADA;;10

У випадку віддаленого доступу до СУБД треба використовувати ім'я хосту та порт серверу СУБД, наприклад: server.nm.org;;user;password;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":
$ psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD '123456'"
  • Підключення до СУБД за допомогою цього модуля, ввівши адресу БД: "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".

Operations for 1000 records, seconds Nokia N800, PostgreSQL 8.3 (remote) AMD Turion L625 1.6, 2G, PostgreSQL 9.1 [local; 100Base-TX] Intel(R) Core(TM) i3 CPU 1.33GHz, 3G, HDD [100Base-TX]
Creating: 5 1.08; 1.6; 3.8 2.07
Updating: 4.8 1.12; 1.6; 3.9 2.35
Getting: 2.96 0.64; 1.2; 2.1 1.26
Seeking: - - 7.9
Seeking in preload: - - 0.038
Deleting: 1.73 0.39; 0.6; 1.6 0.94