Сервер PostgreSQL і MS Access, MS Office, Програмні керівництва, статті

Сервер PostgreSQL поки мало поширений в нашій країні. Можна багато гадати про причини такого стану справ. Істотну роль тут, можливо, зіграла “доступність” більшості з добре відомих комерційних серверів фірм Oracle, Microsoft, Sybase та інших.

Крім того, практично у кожного великого постачальника засобів розробки є свій власний сервер, часто йде в комплекті, який в першу чергу і намагаються використовувати програмісти.

І ще, дуже важливо, на мій взляд, що довгий час була відсутня можливість запустити сервер PostgreSQL під Windows. Тепер гострота цієї проблеми знято і можна без особливих зусиль встановити сервер PostgreSQL практично на будь-яку версію Windows. Як це зробити досить докладно описано в замітці «Установка PostgreSQL під Windows “98».

У багатьох інших країнах ситуація інакша. PostgreSQL відомий не менш, ніж MySQL і в багатьох випадках заміщає останній, якщо потрібні можливості, які той поки забезпечити не в змозі. Також він там часто застосовується в різних бюджетних організаціях (медичних, освітніх тощо). Про поширеність і високій якості PostgreSQL говорить і той факт, що компанія Red Hat вибрала його як “Придворного” сервера баз даних для своїх дистрибутивів Linux. Наслідком цього є присутність PostgreSQL у вітчизняному дистрибутиві від ASP Linux.

Але найбільш важливо інше – робота над сервером ведеться дуже активно і з допоміжного інструменту, що забезпечує підтримку роботи з базами даних для web-серверів, PostgreSQL останнім часом перетворюється в повноцінний “движок”, придатний для використання в традиційних системах обліку, побудованих за технологією кліет-сервер. А, як відомо, клієнтська частина таких систем часто створюється за допомогою MS Access.


Коротко про сам сервері

Я не хочу глибоко вдаватися в історію і лише зазначу, що PostgreSQL сягає своїм корінням в проект Postgres, який очолював професор Каліфорнійського Університету Мікаель Стоунбрейкера (Michael Stonebraker) і який субсидувала кількома фондами та агенціями, переважно військовими.

Основною платформою для PostgreSQL в даний час є Linux та інші UNIX-подібні операційні системи. Спеціальної версії для Windows не існує, хоча якісь роботи в цьому напрямі ведуться. Поки є можливість встановити сервер PostgreSQL на практично всіх версіях Windows за допомогою емулятора CygWin, до складу якого входить уже скомпільований сервер PostgreSQL. Крім проблем з підтримкою російської локалі і кілька зниженого швидкодії, такий варіант цілком працездатний.

Що стосується засобів адміністрування, то це не найсильніша сторона PostgreSQL. Хоча необхідні програми звичайно ж є (архівація та відновлення, виконання запитів, отримання статистичної інформації тощо), всі вони мають інтерфейс командного рядка. Єдине більш-менш нормальне засіб з графічним інтерфейсом під Windows – pgAdmin II. Є ще щось на PHP (з web-інтерфейсом), але особисто для мене такий варіант поки що не дуже зручний.

На відміну від багатьох інших серверів, PostgreSQL підтримує узгодженість даних при многопользовательской роботі використовуючи не блокування, а багатоверсійного модель (MVCC – Multiversion Concurrency Control). Це означає, що кожна транзакція бачить стан даних таким, яким воно було на момент старту цієї транзакції, незалежно від поточного стану даних. Таким чином, транзакція захищена від перегляду суперечливих даних, наявність яких може бути обумовлено діями інший, паралельно виконується транзакції. Якщо таблицю все ж необхідно заблокувати, то це можна зробити за допомогою спеціальної команди LOCK.

Посилальна цілісність підтримується цілком традиційним шляхом, за допомогою визначення обмежень (Constraints). Параметри обмежень досить різноманітні і охоплюють всі мислимі випадки поведінки при спробах порушити цілісність даних (каскадні видалення та оновлення, робота з NULL і т.д.).


Типи даних

За свою довгу історію, PostgreSQL назбиравши пристойну кількість різноманітних типів даних, у тому числі досить екзотичних (point, line, polygon, bit, macaddr і т.д.). Якщо і цього недостатньо, то можна створювати свої власні типи і визначати операції над ними. Також підтримуються багатовимірні масиви змінної довжини. При роботі ж з PostgreSQL через MS Access найбільш важливі наступні типи даних:
































































Тип даних PostgreSQL  Тип даних MS Access  Коментарі 
INTEGER Довге ціле 32-бітове ціле.
SMALLINT Ціле 16-бітове ціле.
BIGINT Текст Access “97 не підтримує 64-бітові цілі.
VARCHAR(N) Текстовий Розмір не повинен перевищувати 254 символу, хоча PostgreSQL допускає і більше.
DOUBLE PRECISION З плаваючою точкою (8 байт)  
REAL З плаваючою точкою (4 байт)  
DATE Дата / Час Тільки дата
TIMESTAMP Дата / Час Дата і час
BOOLEAN Логічний  
NUMERIC(precision, scale) З плаваючою точкою (8 байт) або текст в Access “97 і Дійсне в Access” 2002. Грошового типу немає, а заміняє його NUMERIC в Access “97 перетвориться ODBC-драйвером в число з плаваючою крапкою (8 байт) при точності (precision) не більше 15 і текст при більшій точності. Access” 2002 нормально працює з цим типом даних.
TEXT Поле MEMO  
BYTEA Поле об’єкту OLE Працює дуже повільно і схильний перекодуванні, якщо кодова сторінка БД і клієнтської програми не збігаються.
SERIAL Довге ціле Використовується для автоінкремента, як Лічильник в Access. Насправді, це звичайний INTEGER, для якого автоматично створюється послідовність, яка використовується при встановленні значення за замовчуванням.
 

Таким чином, найбільш істотною вадою при використанні Access “97 можна вважати відсутність в PostgreSQL типу, який би абсолютно точно відповідав грошового типу даних і відповідно розпізнав б ODBC драйвером. У разі Access “2002 такої проблеми і зовсім не виникає.

Крім того, доводиться враховувати деякі особливості застосування тих чи інших типів і, можливо, вживати спеціальні заходи для забезпечення коректної роботи.


ODBC драйвер

ODBC драйвер для Windows в комплект поставки сервера, звичайно, не входить. Його треба завантажити з окремого сайту, посилання на який може бути без праці виявлено на основному сайті PostgreSQL. Установка драйвера ніяких проблем не викликає.

Для підключення до сервера потрібно створити користувальницький або системний DSN і для правильної роботи з Access встановити, як мінімум, наступні параметри:


Отриманий DSN можна використовувати для приєднання таблиць і уявлень сервера, проте треба пам’ятати наступне:



  1. Щоб таблицю можна було редагувати, для неї повинен існувати унікальний індекс або первинний ключ.
  2. Щоб подання (VIEW) також було оновлюваним, необхідно визначити для нього правила (RULES) додавання, зміни та видалення, але навіть це допомагає тільки для серверів версій 7.1.X і, ймовірно, більш ранніх. У версіях 7.2.X працювати з оновлюваними уявленнями безпосередньо з таблиць і пов’язаних форм Access неможливо.
  3. Унікальні індекси та первинні ключі для уявлень автоматично не розпізнаються, тому їх треба вказувати вручну в процесі підключення таблиці або шляхом створення псевдоіндекса.

Драйвер підтримує установку з’єднання і без створення DSN, однак у цьому випадку всі необхідні параметри повинні бути зазначені в рядку підключення.

Драйвер постійно вдосконалюється, тому розташування параметрів у діалогових вікнах, їх склад та значення за замовчуванням можуть з часом змінюватися.


Програмування сервера

Можливості сервера PostgreSQL в області програмування дуже великі і різноманітні. Є можливість створювати збережені процедури (точніше – функції) на декількох мовах (SQL, PL / PgSQL, PL / PgTCL, PL / Perl, PL / Python) і навіть додавати свої власні мови. У поточній версії функції не можуть повертати набори даних, проте вже у версії 7.3 це буде реалізовано.

Вбудовані і призначені для користувача функції можна використовувати в якості значень за замовчуванням полів таблиць. Ніяких особливих обмежень на такі функції не накладається. Зокрема, всередині них можна виробляти вибірку даних з таблиць і повертати результат, заснований на цій вибірці.

Тригери також підтримуються і можуть спрацьовувати як до (Before), так і після (After) виконання модифікації даних. Спрацьовують вони для кожного запису окремо. Тригери, що спрацьовують раз для цілого кортежу поки не реалізовані.

Агрегатні функції представлені звичайним набором (count, sum, max, min і т.д.) і можуть бути додані. Таким чином, наприклад, можна визначити функцію, яка буде об’єднувати значення текстового поля з декількох записів.

Оператори підтримуються в достатній кількості та асортименті і, як я вже зазначав раніше, можуть бути додані самостійно. Як приклад нижче перераховані вбудовані математичні оператори:


































































































Символ  Назва  Приклад  Результат 
+ Додавання 2 + 3 5
Віднімання 2 – 3 -1
* Множення 2 * 3 6
/ Розподіл 4 / 2 2
% Модуль (залишок) 5 % 4 1
^ Зведення в ступінь 2.0 ^ 3.0 8
// Квадратний корінь // 25.0 5
/// Кубічний корінь /// 27.0 3
! Факторіал 5 ! 120
!! Факторіал (префіксний) !! 5 120
@ Абсолютне значення @ -5.0 5
& Побітове AND 91 & 15 11
/ Побітове OR 32 / 3 35
# Побітове XOR 17 # 5 20
~ Побітове NOT ~1 -2
<< Побітове зрушення вліво 1 << 4 16
>> Побітове зрушення вправо 8 >> 2 2
 

Система безпеки

Першою частиною системи безпеки можна вважати систему аутентифікації підключень до сервера та створення шифрованих сесій. Вся інформація про можливість (або неможливість) підключення та режими перевірки задаються у файлі pg_hba.conf. Говорячи коротко, в цьому файлі зберігається інформація про те, хто до яких баз даних з яких комп’ютерів може отримати доступ і як він повинен довести свої повноваження.

Друга частина системи безпеки – це традиційний поділ прав доступу для користувачів і груп. У поточній версії розмежування доступу підтримується тільки для таблиць і уявлень. У наступній версії 7.3 планується суттєво покращити цю систему.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*