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.3 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