<?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&group=page-Modules%2FPostgreSQL&action=page&filter=&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> • ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../ru/Modules/PostgreSQL.html" title="Модули/PostgreSQL (100% translated)">mRussian</a> • ‎<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 /> <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>