Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

PostgreSQL


Pg logo.png

План:


Введення

PostgreSQL (вимовляється "Пост-Грес-Кю-Ель" [1], в професійному середовищі коротко називається "постгрес") - вільна об'єктно-реляційна система управління базами даних (СКБД).

Існує в реалізаціях для наступних платформ: Linux, Solaris / OpenSolaris, Win32, Win x86-64, Mac OS X, FreeBSD, QNX 4.25, QNX 6.


1. Підтримка стандартів, можливості, особливості

PostgreSQL базується на мові SQL і підтримує багато з можливостей стандарту SQL: 2003 (ISO / IEC 9075) [2].

На даний момент (версія 8.4.0), в PostgreSQL є наступні обмеження: [3]

Максимальний розмір бази даних Немає обмежень
Максимальний розмір таблиці 32 Тбайт
Максимальний розмір запису 1,6 Тбайт
Максимальний розмір поля 1 ГБайт
Максимум записів у таблиці Обмежено розміром таблиці
Максимум полів в таблиці 250-1600, залежно від типів полів
Максимум індексів у таблиці Немає обмежень

Сильними сторонами PostgreSQL вважаються:

  • підтримка БД практично необмеженого розміру;
  • потужні і надійні механізми транзакцій і реплікації;
  • розширювана система вбудованих мов програмування: у стандартній поставці підтримуються PL / pgSQL , PL / Perl , PL / Python і PL / Tcl ; Додатково можна використовувати PL / Java , PL / PHP , PL / Py , PL / R , PL / Ruby , PL / Scheme і PL / sh , А також є підтримка завантаження C -сумісних модулів [4];
  • спадкування;
  • легка розширюваність.

2. Історичний нарис

PostgreSQL веде свою "родовід" від некомерційного СУБД Postgres, розробленої, як і багато open-source проекти, в Каліфорнійському університеті в Берклі. До розробки Postgres, що почалася в 1986 році, мав безпосереднє відношення Майкл Стоунбрейкера, керівник більш раннього проекту Ingres, на той момент вже придбаного компанією Computer Associates. Сама назва "Postgres" розшифровувалося як "Post In gres", відповідно, при створенні Postgres були застосовані багато хто вже раніше зроблені напрацювання.

Стоунбрейкера і його студенти розробляли нову СУБД протягом восьми років, з 1986 по 1994. За цей період в синтаксис були введені процедури, правила, призначені для користувача типи і багато інших компонентів. Робота не пройшла марно - в 1995 розробка знову розділилася: Стоунбрейкера використовував отриманий досвід у створенні комерційної СУБД Illustra, яку просуває його власної однойменною компанією (придбаної згодом компанією Informix), а його студенти розробили нову версію Postgres - Postgres95, в якій мова запитів POSTQUEL - спадщина Ingres - був замінений на SQL.

У цей момент розробка Postgres95 була виведена за межі університету і передана команді ентузіастів. З цього моменту СУБД отримала ім'я, під яким вона відома і розвивається в поточний момент - PostgreSQL.


3. Основні можливості

3.1. Опції

Функції є блоками коду, виконуваними на сервері, а не на клієнта БД. Хоча вони можуть писатися на чистому SQL, реалізація додаткової логіки, наприклад, умовних переходів і циклів, виходить за рамки власне SQL і вимагає використання деяких мовних розширень. Функції можуть писатися з використанням одного з таких мов:

  • Вбудований процедурний мову PL / pgSQL, багато в чому аналогічний мові PL / SQL, що використовується в СУБД Oracle;
  • Скриптові мови - PL / Lua, PL / LOLCODE, PL / Perl, plPHP, PL / Python, PL / Ruby, PL / sh, PL / Tcl і PL / Scheme;
  • Класичні мови - C, C + +, Java (через модуль PL / Java);
  • Статистичний мову R (через модуль PL / R).

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

Функції можуть виконуватися як з правами їх творця, так і з правами поточного користувача.

Іноді функції ототожнюються з збереженими процедурами, проте між цими поняттями є різниця.


3.2. Тригери

Тригери визначаються як функції, що ініціюються DML -операціями. Наприклад, операція INSERT може запускати тригер, перевіряючий додану запис на відповідності певним умовам. При написанні функцій для тригерів можуть використовуватися різні мови програмування (див. вище).

Тригери асоціюються з таблицями. Множинні тригери виконуються в алфавітному порядку.

3.3. Правила та подання

Механізм правил ( англ. rules ) Являє собою механізм створення користувацьких обробників не тільки DML -операцій, а й операції вибірки. Основна відмінність від механізму тригерів полягає в тому, що правила спрацьовують на етапі розбору запиту, до вибору оптимального плану виконання і самого процесу виконання. Правила дозволяють перевизначати поведінку системи при виконанні SQL-операції до таблиці. Хорошим прикладом є реалізація механізму уявлень ( англ. views ): При створенні уявлення створюється правило, яке визначає, що замість виконання операції вибірки до подання система повинна виконувати операцію вибірки до базової таблиці / таблицями з урахуванням умов вибірки, що лежать в основі визначення уявлення. Для створення уявлень, що підтримують операції оновлення, правила для операцій вставки, зміни та видалення рядків повинні бути визначені користувачем.


3.4. Індекси

В PostgreSQL є підтримка індексів наступних типів: B-дерево, хеш, R-дерево, GiST, GIN. При необхідності можна створювати нові типи індексів, хоча це далеко не тривіальний процес. Індекси в PostgreSQL мають такі властивості:

  • можливий перегляд індексу не тільки в прямому, а й у зворотному порядку - створення окремого індексу для роботи конструкції ORDER BY ... DESC ORDER BY ... DESC не потрібно;
  • можливе створення індексу над кількома стовпцями таблиці, в тому числі над стовпцями різних типів даних;
  • індекси можуть бути функціональними, тобто будуватися не на базі набору значень якогось стовпця / стовпців, а на базі набору значень функції від набору значень;
  • індекси можуть бути частковими, тобто будуватися тільки за частиною таблиці (за деякою її проекції); в деяких випадках це допомагає створювати набагато більш компактні індекси або досягати поліпшення продуктивності за рахунок використання різних типів індексів для різних (наприклад, з точки зору частоти оновлення) частин таблиці;
  • планувальник запитів може використовувати кілька індексів одночасно для виконання складних запитів.

3.5. Багатоверсійність ( MVCC)

PostgreSQL підтримує одночасну модифікацію БД кількома користувачами за допомогою механізму Multiversion Concurrency Control ( MVCC). Завдяки цьому дотримуються вимоги ACID, і практично відпадає потреба в блокуваннях читання.

3.6. Типи даних

PostgreSQL підтримує великий набір вбудованих типів даних:

  • Чисельні типи
    • Цілі
    • З фіксованою точкою
    • З плаваючою точкою
    • Грошовий тип (відрізняється спеціальним форматом виводу, а в іншому аналогічний числах з фіксованою крапкою з двома знаками після коми)
  • Символьні типи довільної довжини
  • Двійкові типи (включаючи BLOB)
  • Типи "дата / час" (повністю підтримують різні формати, точність, формати виводу, включаючи останні зміни в часових поясах)
  • Логічний тип
  • Перерахування
  • Геометричні примітиви
  • Мережеві типи
  • UUID -ідентифікатор
  • XML -дані
  • Масиви
  • OID-типи
  • Псевдотіпи

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


3.7. Користувальницькі об'єкти

PostgreSQL може бути розширений користувачем для власних потреб практично в будь-якому аспекті. Є можливість додавати власні:

  • Перетворення типів
  • Типи даних
  • Домени (для користувача типи із спочатку накладеними обмеженнями)
  • Функції (включаючи агрегатні)
  • Індекси
  • Оператори (включаючи перевизначення вже існуючих)
  • Процедурні мови

3.8. Спадкування

Таблиці можуть успадковувати характеристики та набори полів від інших таблиць (батьківських). При цьому дані, додані в породжену таблицю, автоматично будуть брати участь (якщо це не зазначено окремо) в запитах до батьківської таблиці.

Даний функціонал в поточний час не є повністю завершеним. Однак він достатній для практичного використання.

4. Інші можливості

  • Дотримання принципів ACID.
  • Відповідність стандартам ANSI SQL-92 і SQL-99.
  • Підтримка запитів з OUTER JOIN, UNION, UNION ALL, EXCEPT, INTERSECT і підзапитів.
  • Послідовності.
  • Контроль цілісності.
  • Реплікація.
  • Загальні табличні вирази і рекурсивні запити
  • Аналітичні функції
  • Підтримка Юнікод (UTF-8).
  • Підтримка регулярних виразів в стилі Perl.
  • Вбудована підтримка SSL і Kerberos.
  • Протокол поділюваних блокувань.
  • Підкачуємі розширення, що підтримують SHA1, MD5, XML і іншу функціональність ( API відкритий).
  • Засоби для генерації сумісного з іншими системами SQL-коду та імпорту з інших систем.

5. Надійність

Згідно з результатами автоматизованого дослідження різного ПЗ на предмет помилок, у вихідному коді PostgreSQL було знайдено 20 проблемних місць на 775000 рядків вихідного коду (В середньому, одна помилка на 39000 рядків коду) [5]. Для порівняння: MySQL - 97 проблем, одна помилка на 4000 рядків коду; FreeBSD (цілком) - 306 проблем, одна помилка на 4000 рядків коду; Linux (тільки ядро) - 950 проблем, одна помилка на 10 000 рядків коду.


6. Комерційні розширення

На базі PostgreSQL компанією EnterpriseDB створені більш потужні варіанти цієї СУБД, які є платними для комерційного використання - Postgres Plus (складається цілком тільки з продуктів з відкритими початковими кодами; плата вимагається лише при необхідності придбання комерційної підтримки продукту) і Postgres Plus Advanced Server (розширення PostgreSQL спеціальними можливостями для забезпечення сумісності з Oracle Database) [6]. У комплекті поставки цих продуктів міститься великий набір ПЗ для розробників і DBA:

  • Postgres Studio - більш потужний аналог pgAdmin;
  • Postgres Plus Debugger - відладчик для коду на PL / pgSQL, інтегрований з попереднім пакетом;
  • Migration Studio - інструмент для автоматичного перетворення баз даних з MySQL / Oracle в PostgreSQL

7. Подальший розвиток

На версію 9.0 .* заплановано введення до складу СУБД наступних можливостей:

  • підключення до зовнішніх джерел даних SQL / MED (Management of External Data)
  • доступ тільки до індексів при деяких вибірках
  • анонімні блоки на будь-якому доступному мовою збережених процедур
  • відкладені обмеження унікальності
  • простіший синтаксис для секціонованих таблиць
  • гарячий резерв
  • плани запитів у вигляді JSON і XML
  • тригери, що спрацьовують при оновленні певних колонок таблиці.

Примітки

  1. Згідно FAQ - wiki.postgresql.org / wiki / FAQ # What_is_PostgreSQL.3F_How_is_it_pronounced.3F_What_is_Postgres.3F, а також відповідно до аудіозаписом - www.postgresql.org/files/postgresql.mp3 еталонного вимови. Так само часто зустрічається вимова "Постгре-Ес-Кью-Ел", яке не цілком узгоджується з історією найменування (немає окремого слова "Postgre", а частка "-gres" зустрічається в назвах багатьох реляційних СУБД). У розділі "Історичний нарис" ви можете прочитати чим викликані такі невизначеності.
  2. PostgreSQL 8.4.5 Documentation. Appendix D. SQL Conformance - www.postgresql.org/docs/8.4/interactive/features.html
  3. PostgreSQL: About - www.postgresql.org/about/
  4. PostgreSQL 8.4.5 Documentation. Chapter 37. Procedural Languages ​​- www.postgresql.org/docs/8.4/interactive/xplang.html
  5. PostgreSQL Achieves Coverity Quality Certification - www.postgresql.org/about/news.363 (Англ.) . PostgreSQL Global Development Group (24.07.2005). - Новина про результати сертифікації якості. архіві - www.webcitation.org/61AUCkJbg з першоджерела 24 серпня 2011.
  6. Підхід до міграції баз даних з Oracle на EnterpriseDB - www.bureausolomatina.ru/node/125. Бюро Соломатіна (13.12.2010). - Підхід до міграції баз даних з Oracle на EnterpriseDB. архіві - www.webcitation.org/61AUDABD8 з першоджерела 24 серпня 2011.

Цей текст може містити помилки.

Схожі роботи | скачати
© Усі права захищені
написати до нас