<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html class="client-nojs" dir="ltr" lang="en">
<head>
<meta charset="UTF-8" />
<title>Модулі/PostgreSQL - OpenSCADAWiki</title>
<meta content="MediaWiki 1.26.4" name="generator" />
<link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" />
<link href="../../en/files/doc.css" rel="stylesheet" /></head>
<body><div class="floatright"><a href="../index.html"><img alt="OpenSCADA" src="../../en/files/index.png" /></a></div><div id="mw_header">
			<div class="mw-indicators">
</div>
			<h1 id="firstHeading" lang="uk">Модулі/PostgreSQL</h1>
		</div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="uk"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&amp;group=page-Modules%2FPostgreSQL&amp;action=page&amp;filter=&amp;language=uk" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/PostgreSQL" title="Modules/PostgreSQL">Modules/PostgreSQL</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../../en/Modules/PostgreSQL.html" title="Modules/PostgreSQL (100% translated)">English</a>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../ru/Modules/PostgreSQL.html" title="Модули/PostgreSQL (100% translated)">mRussian</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">Українська</span></div></div>
<table class="wikitable">

<tr>
<th> Модуль </th>
<th> Ім'я </th>
<th> Версія </th>
<th> Ліцензія </th>
<th> Джерело </th>
<th> Мови </th>
<th> Платформи </th>
<th> Тип </th>
<th> Автор </th>
<th> Опис
</th></tr>

<tr>
<td> <a href="../Modules/PostgreSQL.html" title="Special:MyLanguage/Modules/PostgreSQL">PostgreSQL</a> </td>
<td> БД PostgreSQL
<ul><li> <b><a href="../Program_manual.html#DBFeat" title="Special:MyLanguage/Documents/Program manual">Властивості</a>:</b> SQL, LIST, STRUCT, GET, SEEK, PRELOAD, SET, DEL, FIX, TR, ERR</li></ul>
</td>
<td> 3.1 </td>
<td> GPL2 </td>
<td> bd_PostgreSQL.so </td>
<td> en,uk,ru,de </td>
<td> x86,x86_64,ARM
</td>
<td> БД </td>
<td> Роман Савоченко<br />&nbsp;&nbsp;<font size="-2"><i>Максим Лисенко (2010-2011)</i></font> </td>
<td> Модуль БД. Надає підтримку СУБД PostgreSQL.
</td></tr></table>
<p>Модуль надає до OpenSCADA підтримку СУБД PostgreSQL, яка є потужною реляційною та багатоплатформеною СУБД, доступною за вільною ліцензією та розроблюваною <a class="external text" href="http://www.postgresql.org/" rel="nofollow noreferrer noopener" target="_blank">співтовариством PostgreSQL</a>. Модуль засновано на бібліотеці API виробника СУБД PostgreSQL на мові "С" та дозволяє здійснювати дії над базами даних, таблицями та вмістом таблиць.
</p>
<div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.91.D0.94"><span class="tocnumber">1</span> <span class="toctext">Операції над БД</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B5.D1.8E"><span class="tocnumber">2</span> <span class="toctext">Операції над таблицею</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.B2.D0.BC.D1.96.D1.81.D1.82.D0.BE.D0.BC_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.96"><span class="tocnumber">3</span> <span class="toctext">Операції над вмістом таблиці</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#.D0.94.D0.BE.D1.81.D1.82.D1.83.D0.BF_.D0.B4.D0.BE_.D0.91.D0.94"><span class="tocnumber">4</span> <span class="toctext">Доступ до БД</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#.D0.9F.D1.80.D0.BE.D0.B4.D1.83.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D1.96.D1.81.D1.82.D1.8C_.D0.A1.D0.A3.D0.91.D0.94"><span class="tocnumber">5</span> <span class="toctext"><span>Продуктивність СУБД</span></span></a></li>
</ul>
</div>

<h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.91.D0.94"><span class="mw-headline-number">1</span> Операції над БД</span></h2>
<p>Підтримуються операції відкриття та закриття БД, з можливістю створення нової БД при відкритті та видалення існуючої при закритті. У термінах підсистеми "БД" OpenSCADA, відкриттям БД є її реєстрація для наступного використання програмою. Також, підтримується операція запиту переліку таблиць у БД.
</p><p>СУБД PostgreSQL адресується рядком наступного типу: <b>{host};{hostaddr};{user};{pass};{db};{port}[;{connect_timeout}]</b>. Де:
</p>
<ul><li> <i>host</i> — ім'я хосту на якому працює сервер СУБД PostgreSQL. Якщо починається зі слеша ('/'), то використовується UNIX-сокет замість TCP; значення це - ім'я каталогу де зберігається файл сокету;</li>
<li> <i>hostaddr</i> — чисельна адреса хосту PostgreSQL сервера, яка має бути у форматі IPv4 стандарту, як то 172.28.40.9; Ви також можете використовувати IPv6, якщо він підтримується; якщо цей параметр вказано непорожнім то завжди використовуються TCP/IP підключення;</li>
<li> <i>user</i> — ім'я користувача БД;</li>
<li> <i>pass</i> — пароль користувача для доступу до БД;</li>
<li> <i>bd</i>   — ім'я БД;</li>
<li> <i>port</i> — порт, який слухає сервер СУБД (по замовченню 5432);</li>
<li> <i>connect_timeout</i> — час очікування з'єднання, у секундах.</li></ul>
<p>У випадку локального доступу до СУБД, у межах одного хосту, рядок адреси може мати наступний вигляд: <b>;;user;password;OpenSCADA;;10</b>
</p><p>У випадку віддаленого доступу до СУБД треба використовувати ім'я хосту та порт серверу СУБД, наприклад: <b>server.nm.org;;user;password;OpenSCADA;;10</b>
</p>
<h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B5.D1.8E"><span class="mw-headline-number">2</span> Операції над таблицею</span></h2>
<p>Підтримуються операції відкриття, закриття таблиці, з можливістю створення нової таблиці при відкритті та видалення існуючої при закриті, а також запит структури таблиці.
</p>
<h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.B2.D0.BC.D1.96.D1.81.D1.82.D0.BE.D0.BC_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.96"><span class="mw-headline-number">3</span> Операції над вмістом таблиці</span></h2>
<ul><li> сканування записів таблиці;</li>
<li> запит значень визначених записів;</li>
<li> встановлення значень визначених записів;</li>
<li> видалення записів.</li></ul>
<p>API підсистеми "БД" передбачає доступ до вмісту таблиці за значенням ключового(их) полів. Так, операція запиту запису передбачає попереднє встановлення ключових стовпчиків об'єкту TConfig, за яким буде здійснено запит. Створення нового запису(рядка) здійснюється операцією встановлення значень запису, який відсутній.
</p><p>Модуль дозволяє динамічно міняти структуру таблиць БД PostgreSQL. Так, у випадку невідповідності структури таблиці та структури запису що встановлюється, структуру таблиці буде приведено до потрібної структури запису. У випадку запиту значень запису та невідповідності структур запису і таблиці, буде отримано тільки значення загальних елементів запису та таблиці. Модуль не відстежує послідовності розташування елементів запису та структури таблиці!
</p><p>Модулем реалізується механізм підтримки багатомовних текстових змінних. Для полів із багатомовною текстовою змінною створюються стовпчики окремих мов у форматі "<b>{lang}#{FldID}</b>" (en#NAME). При цьому, базовий стовпчик містить значення для базової мови. Стовпчики окремих мов створюються за потреби, у момент збереження до БД та при виконанні OpenSCADA у відповідній локалі. У випадку відсутності значень для конкретної мови буде використано значення для базової мови.
</p><p>Типи елементів БД PostgreSQL наступним чином відповідають типам елементів OpenSCADA:
</p>
<table class="wikitable">

<tr>
<th> Типи полів OpenSCADA </th>
<th> Типи полів СУБД PostgreSQL
</th></tr>
<tr>
<td> TFld::String </td>
<td> character(n), character varying(n), text
</td></tr>
<tr>
<td> TFld::Integer </td>
<td> integer, bigint, timestamp with time zone [для полів з ознакою TFld::DateTimeDec]
</td></tr>
<tr>
<td> TFld::Real </td>
<td> double precision
</td></tr>
<tr>
<td> TFld::Boolean </td>
<td> smallint
</td></tr></table>
<h2><span class="mw-headline" id=".D0.94.D0.BE.D1.81.D1.82.D1.83.D0.BF_.D0.B4.D0.BE_.D0.91.D0.94"><span class="mw-headline-number">4</span> Доступ до БД</span></h2>
<p>СУБД PostgreSQL містить механізм розподілу доступу, який полягає у вказані привілеїв користувача БД. У таблиці нижче перелічено потрібні привілеї для повноцінної роботи.
</p>
<table class="wikitable">

<tr>
<th> Операція </th>
<th> Привілей
</th></tr>
<tr>
<td> Створення БД </td>
<td> CREATEDB
</td></tr>
<tr>
<td> Сотворення підключення </td>
<td> LOGIN
</td></tr></table>
<p>Для доступу до БД права треба дозволяти безпосередньо для вказаної БД, а у випадку створення БД треба також дозволити доступ до системної БД "template1", яка використовується для підключення на стадії створення нової БД.
</p><p>Коротко розглянемо процедуру первинного налаштування серверу PostgreSQL, з метою підключення до нього за допомогою цього модуля:
</p>
<ul><li> Встановлення серверу СУБД PostgreSQL у вигляді пакету або збіркою.</li>
<li> Первинна ініціалізація серверу:</li></ul>
<pre style="white-space: pre-wrap; margin-left: 30pt">
# Ініціалізація БД
$ service postgresql initdb
# Запуск БД
$ service postgresql start
</pre>
<ul><li> Дозвіл довіреного доступу з локальної або потрібної підмережі, редагуючи файл <b>/var/lib/pgsql/data/pg_hba.conf</b> на предмет установки "trust":</li></ul>
<pre style="white-space: pre-wrap; margin-left: 30pt">
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
</pre>
<ul><li> Перезапуск серверу після редагування доступу:</li></ul>
<pre style="white-space: pre-wrap; margin-left: 30pt">
$ service postgresql restart</pre>
<ul><li> Встановлення потрібного паролю для системного користувача "postgres":</li></ul>
<pre style="white-space: pre-wrap; margin-left: 30pt">
$ psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD '123456'"</pre>
<ul><li> Підключення до СУБД за допомогою цього модуля, ввівши адресу БД: <b>"localhost;;postgres;123456;test"</b></li></ul>
<h2><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D0.B4.D1.83.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D1.96.D1.81.D1.82.D1.8C_.D0.A1.D0.A3.D0.91.D0.94"><span class="mw-headline-number">5</span> <span id="Tests" title="#Tests">Продуктивність СУБД</span></span></h2>
<p>Вимірювання продуктивності СУБД здійснювалося тестом "БД" модуля тестів "SystemTests", шляхом виконання операцій над записами структурою: "<b>name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string</b>".
</p>
<table class="wikitable">

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






</div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Modules/PostgreSQL/uk">Modules/PostgreSQL/uk</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body>
</html>