asyan.org
добавить свой файл
1 2 ... 4 5
1. Вступ

PostgreSQL - це об'єктно-реляційна система управління базами даних (ORDBMS) заснована на POSTGRES версії 4.2 , яка була розроблена в Науковому Комп'ютерному Департаменті Берклі Каліфорнійського Університету. Проект POSTGRES, під керівництвом професора Майкла Стоунбрейкера (Michael Stonebraker), був підтриманий Агентством розширення оборонної Дослідних Проектів (Defense Advanced Research Projects Agency (DARPA)), Офісом Армійських Досліджень (Army Research Office (ARO)), Національним Науковим Фондом (National Science Foundation (NSF)), а також ESL, Inc.PostgreSQL є прямим нащадком з відкритим вихідним кодом від оригінального коду, зробленого в Берклі. СУБД надає підтримку SQL92/SQL99 та інші сучасні можливості. POSTGRES є піонером у багатьох об'єктно-реляційних аспектах, що з'явилися тепер в деяких комерційних СУБД. Традиційні реляційні СУБД (RDBMS) підтримують модель даних, яка становить колекцію пойменованих кортежів, що містять атрибути заданого типу. У сучасних комерційних системах, до можливих типів відносяться числа з плаваючою точкою, цілі числа, символьні рядки, грошові типи та дати. Це зазвичай призводить до того, що дана модель є неадекватною для майбутніх програм обробки даних. Реляційна модель успішно замінює попередні моделі почасти в силу "спартанської простоти". Однак, така простота робить реалізацію деяких додатків дуже важкою. PostgreSQL пропонує суттєве збільшення потужності СУБД, через впровадження наступних додаткових аспектів, які дозволяють користувачам легко розширювати систему:

  • успадкування

  • типи даних

  • функції

PostgreSQL належить до категорії СУБД, відомих як об'єктно-реляційні (object-relation). Зауважимо, що тут є відмінність від тих об'єктно-орієнтованих (object-oriented) СУБД, які в основному підтримують традиційні мови реляційних СУБД. Однак, PostgreSQL має деякі об'єктно-орієнтовані можливості, це важливо в світі реляційних СУБД. 

2. Коротка історія PostgreSQL

Об'єктно-реляційна СУБД тепер відома як PostgreSQL (і раніше звана Postgres95) веде своє походження від пакета POSTGRES, який був написаний в департаменті Берклі, Каліфорнійського Університету. Більш ніж десятирічна розробка PostgreSQL зробила цей продукт однією з найбільш потужних СУБД з відкритим вихідним кодом у світі, пропонуючи багатоверсійність управління паралельним доступом, підтримуючи практично всі конструкції SQL (включаючи підзапити, транзакції і визначені користувачем типи і функції) і маючи широкий вибір мов, з допомогою яких можна працювати з СУБД (включаючи C, C + +, Java, Perl, Tcl і Python).

2.1. Проект POSTGRES департаменту Берклі

Реалізація реляційної СУБД POSTGRES почалася в 1986. Початкові концепції для цієї системи були представлені в “The design of POSTGRES” , а визначення початкової моделі даних було здійснено в “The POSTGRES data model” . Пристрій системи управління на той момент, було описано в “The design of the POSTGRES rules system” . Обгрунтування архітектури і менеджери зберігання були детально описані в “The design of the POSTGRES storage system” .

Потім вийшло кілька версій Postgres. Перша "demoware" система запрацювала в 1987 і була продемонстрована в 1988 на Конференції ACM-SIGMOD. Версія 1, описана в The implementation ofPOSTGRES була випущена в червні 1989 року і могла працювати з декількома зовнішніми користувачами. У відповідь на критику першого варіанту системи управління, був зроблений наступний варіант (варіант “A commentary on the POSTGRES rules system” ) був перероблений як ( On Rules, Procedures, Caching and Views in Database Systems ) і версія 2, випущена в червні 1990 року була заснована на новій системі управління. Версія 3 випущена в 1991, включала в себе підтримку кількох менеджерів зберігання, покращений обробник запитів і знову переписану систему управління. Більшість наступних версій до появи Postgres95 (див. нижче) були сфокусовані на питаннях переносимості та стабільності. POSTGRES був використаний для реалізації багатьох різних досліджень і написання програм. Сюди увійшли: система аналізу фінансових даних, пакет моніторингу продуктивності струменевих установок, база даних переміщень астероїдів, база даних медичної інформації та кілька географічних інформаційних систем. POSTGRES також використовувався як засіб навчання в декількох університетах. Нарешті компанія Illustra Information Technologies (пізніше влилися в компанію Informix , якої тепер володіє IBM .) взяла код цієї СУБД і комерціалізувала его.POSTGRES став пріоритетним менеджером даних для проекту наукових обчислень Sequoia 2000 після 1992 року.

Розмір спільноти користувачів цього продукту подвоївся в 1993 році. Стало дуже очевидно, що обслуговування прототипу коду і його підтримка займають набагато більше часу, ніж самі дослідження в області баз даних. Намагаючись знизити навантаження, пов'язане з підтримкою, проект БеркліPOSTGRES офіційно припинив своє існування з виходом версії 4.2.

2.2. Postgres95

У 1994, Ендрю Ю (Andrew Yu) і Джоллі Чен (Jolly Chen) додали в POSTGRES інтерпретатор мови SQL. Потім Postgres95 був викладений в Інтернет, щоб знайти свій власний шлях у світі продуктів з відкритим вихідним кодом, як нащадок, заснований на оригінальному коді Берклі POSTGRES. Postgres95 був повністю приведений до стандарту ANSI C і скоротив свій розмір на 25%. Були внесено багато внутрішні зміни, які збільшили продуктивність і налагоджуваність коду.Postgres95 версій 1.0.x був швидше на 30-50% згідно Wisconsin Benchmark у порівнянні з POSTGRES, Version 4.2. За винятком виправлення помилок, були зроблені наступні серйозні розширення: Мова запитів PostQUEL була замінена на SQL (реалізований в цьому сервері). Підзапити не підтримувалися аж до виходу PostgreSQL (див. нижче), але в Postgres95 їх можна було зімітувати за допомогою функцій SQL, що визначаються користувачем. Агрегати були переписані. Також в запити була додана підтримка GROUP BY. Інтерфейс libpq залишився доступним для програм на C.

  • В додаток до програми monitor, була надана нова програма (psql), яка використовувала бібліотеку GNU Readline і була призначена для інтерактивних SQL запитів.

  • Створена нова front-end бібліотека, libpgtcl, що підтримує клієнтів, заснованих на Tcl. Проста оболонка pgtclsh, що надає нові команди Tcl для забезпечення взаімодействіяTcl програм і Postgres95.

  • Була ретельно переглянута робота з великими об'єктами. Інверсійні великі об'єкти представляли собою тільки механізм для зберігання великих об'єктів. (Інверсійна файлова система була видалена).

  • Разом з вихідним кодом став поставлятися короткий підручник з особливостей роботи з SQL вPostgres95.

  • Для побудови проекту став використовуватися GNU make (замість BSD make). Також, Postgres95 був скомпільований зі стандартною версією GCC (вирівнювання даних типу double було виправлено).

2.3. PostgreSQL

У 1996 році було вирішено, що ім'я "Postgres95" не відповідає сьогоденню. Ми вибрали нове ім'я PostgreSQL щоб підкреслити відмінність від оригінального POSTGRES і вихід безлічі версій з підтримкою SQL. У той же час, ми встановили нумерацію версій починаючи з 6.0, повернувшись назад до нумерації, яку почали в проекті Берклі POSTGRES.

При розробці Postgres95 акцент ставився на виявлення і розуміння існуючих проблем в коді продукту. В PostgreSQL акцент змістився на розширення можливостей та сумісності при продовженні роботи в усіх інших областях. Головні зміни в PostgreSQL включають:

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

  • Були реалізовані такі важливі можливості, як підзапити, умовчання, примуси і тригери.

  • Були додані можливості для сумісності зі стандартом SQL92, включаючи первинні ключі, ідентифікатори запитів, literal string type coercion, створення типів, а також двійковий та шістнадцятковий введення цілих чисел.

  • Були поліпшені вбудовані типи даних, включаючи нові широкодіапазонним типи дати / часу і додаткові геометричні типи даних.

  • Швидкість роботи backend коду була збільшена приблизно на 20-40%, а час запуску backend'а було скорочено на 80% в порівнянні з версією 6.0.


3. Оновні концепції роботи з PostgreSQL

3.1 Створення таблиць

PostgreSQL - це система управління реляційними базами даних (СКБД). Це означає, що це система для управління даними, які зберігаються у вигляді відносин. (В підручниках з СУБД існують і інші терміни, наприклад, кортежі - прим. Пер.). Ставлення - це математичний термін для таблиці. Поняття зберігання даних в таблицях є сьогодні таким банальним, що воно може здатися самоочевидним, однак є кілька інших способів організації баз даних. Файли і каталоги в Unix-подібних операційних системах є прикладом ієрархічної бази даних. Одне з найбільш сучасних напрямків розробки СУБД - це об'єктно-орієнтовані бази даних.

Кожна таблиця є пойменованої колекцією рядків (rows) (в російській літературі по SQL переважно говорять "записів" - прим. Пер.). Кожен запис у таблиці має деякий набір пойменованих колонок (columns) (знову-таки в російській літературі переважно говорять "полів" - прим. Пер.) І кожне поле є певним типом даних. Поля в записі розташовані в фіксований порядку, важливо пам'ятати, що SQL ніколи не гарантує упорядкованого проходження записів в таблиці (за винятком випадку, коли вони можуть бути явно розсортовані для видачі користувачеві).

Таблиці групуються в бази даних, а колекція баз даних, керована однією копією сервераPostgreSQL називається кластером баз даних. Команда створення таблиці:

CREATE [ TEMPORARY | TEMP ] TABLE ім’я_таблиці (

{ ім’я_поля тип [ обмеження_поля [...] ] | обмеження таблиці } )

[ INHERITS ( базова_таблиця [ , ... ] ) ] ;



, де

  • TEMPORARY | TEMP. Ознака тимчасової таблиці. Таблиця, створена з ключовим словом TEMPORARY або TEMP, автоматично знищується наприкінці поточного сеансу Всі конструкції рівня таблиці (наприклад, індекси і обмеження) знищуються наприкінці сеансу разом з таблицею. Якщо ім’я тимчасової таблиці співпадає з ім’ям існуючої таблиці, то всі посилання на таблицю з цим ім’ям впродовж сеансу відноситимуться до тимчасової таблиці. Іноді це викликає проблеми, оскільки тимчасова таблиця побічно заміщає існуючу таблицю в контексті поточного сеансу до моменту її знищення.

  • таблиця. Ім’я створюваної таблиці.

  • поле. Ім’я поля в новій таблиці. Імена полів перераховуються в круглих дужках і розділяються комами.

  • тип. Відразу ж після імені користувача задається його тип – стандартний тип або масив одного із стандартних типів.

  • обмеження_поля.

  • базова_таблиця. Ім’я таблиці, від якої нова таблиця успадковує поля. Якщо імена успадкованих полів збігаються з іменами полів, раніше включених в структуру таблиці, PostgreSQL видає повідомлення про помилку і перериває виконання команди.


^ 3.1.1 Типи даних

Числові типи

smallint

коротке 2-х байтовое ціле

integer

звичайне 4-х байтовое ціле

bigint

велике 8-байтовое ціле

decimal

коротке із фіксованою точкою

numeric

коротке із фіксованою точкою

real

коротке із рухомою точкою

double precision

коротке із рухомою точкою подвійної точності

serial

ціле із автозбільшенням

bigserial

велике ціле із автозбільшенням




^ Грошові типи

money

гроші



следующая страница >>