Система управления базами данных PostgreSQL

Реферат

программный триггер пользовательский

PostgreSQL — это свободно распространяемая объектно-реляционная система управления базами данных (ORDBMS), наиболее развитая из открытых СУБД в мире и являющаяся реальной альтернативой коммерческим базам данных.

Краткая история PostgreSQL

Объектно-реляционная СУБД, в настоящее время известная как PostgreSQL ведёт свое происхождение от пакета POSTGRES, который был написан в департаменте Беркли, Калифорнийского Университета. Более чем двадцатилетняя разработка PostgreSQL сделала этот продукт одной из наиболее продвинутых СУБД с открытым исходным кодом.

Проект POSTGRES

Проект POSTGRES, под руководством профессора Майкла Стоунбрейкера (Michael Stonebraker), был спонсирован Агентством Расширенных Оборонных Исследовательских Проектов (Defense Advanced Research Projects Agency (DARPA)), Офисом Армейских Исследований (Army Research Office (ARO)), Национальным Научным Фондом (National Science Foundation (NSF)), а также ESL, Inc. Реализация реляционной СУБД POSTGRES началась в 1986. Затем вышло несколько версий Postgres. Первая система заработала в 1987 и была продемонстрирована в 1988 на Конференции ACM-SIGMOD. Версия 1 была выпущена в июне 1989 года и могла работать с несколькими внешними пользователями.

СУБД POSTGRES была использована для реализации многих различных исследований и написания приложений. Сюда вошли: система анализа финансовых данных, пакет мониторинга производительности реактивных двигателей, база данных перемещений астероидов, база данных медицинской информации и несколько географических информационных систем. СУБД POSTGRES также использовлась как средство обучения в нескольких университетах. POSTGRES стал приоритетным менеджером данных для проекта научных вычислений Sequoia 2000 после 1992 года.

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

Postgres95

В 1994, Эндрю Ю (Andrew Yu) и Джолли Чен (Jolly Chen) добавили в POSTGRES интерпретатор языка SQL. Затем Postgres95 был выложен в Интернет, чтобы найти свой собственный путь в мире продуктов с открытым исходным кодом, как потомок, основанный на оригинальном коде Беркли POSTGRES.

14 стр., 6791 слов

Разработка базы данных для автоматизированной системы управления ...

... обеспечивает работу одного экземпляра базы данных на нескольких узлах grid, позволяя управлять нагрузкой и гибко масштабировать систему в ... небольших баз данных; полупрофессиональные СУБД - в основном используются предприятиями малого бизнеса для проектирования баз данных обычных размеров; профессиональные СУБД - ... Описание структуры курсового проекта: В данной работе рассматривается предметная ...

Postgres95 был полностью приведён к стандарту ANSI C и сократил свой размер на 25%. Были внесены многие внутренние изменения, которые увеличили производительность и обслуживаемость кода. Postgres95 версий 1.0.x был быстрее на 30-50% согласно Wisconsin Benchmark по сравнению с POSTGRES, Version 4.2. За исключением исправления ошибок, были сделаны следующие серьёзные расширения:

? Язык запросов PostQUEL был заменен на SQL (реализованный в этом сервере).

Подзапросы не поддерживались вплоть до выхода PostgreSQL (см. ниже), но в Postgres95 их можно было иммитировать с помощью функций SQL, определяемых пользователем. Агрегаты были переписаны. Также в запросы была добавлена поддержка GROUP BY.

? Для интерактивных SQL запросов была предоставлена новая программа (psql), которая использовала библиотеку GNU Readline. Она вытеснила старую программу monitor.

? Была создана новая front-end библиотека, libpgtcl, поддерживающая клиентов, основанных на Tcl. Простая оболочка pgtclsh, предоставила новые команды Tcl для обеспечения взаимодействия Tcl программ и Postgres95.

? Была тщательно пересмотрена работа с большими объектами. Инверсионные большие объекты представляли собой только механизм для хранения больших объектов. (Инверсионная файловая система была удалена).

? Была удалена instance-level система правил. Правила стали доступны как переписываемые правила.

? Вместе с исходным кодом стал поставляться краткий учебник по особенностям работы с SQL в Postgres95.

? Для построения проекта стал использоваться GNU make (вместо BSD make).

Также, Postgres95 был скомпилирован со стандартной версией GCC (выравнивание данных типа double было исправлено).

PostgreSQL

В 1996 году было решено, что имя «Postgres95» не соответствует настоящему времени. Разработчики выбрали новое имя PostgreSQL чтобы подчеркнуть отличие от оригинального POSTGRES и выход множества версий с поддержкой SQL.

При разработке Postgres95 акцент ставился на обнаружение и понимание существующих проблем в коде сервера. В PostgreSQL акцент сместился на расширение возможностей и совместимости при продолжении работы во всех других областях.

1. Основные возможности

Функции

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

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

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

12 стр., 5806 слов

Мировые рынки золота и операции с золотом

... рынков золота. Международные (Лондон, Цюрих, Дубай, Гонконг, Нью Йорк) Проводится широкий спектр операций; совершаются крупные сделки, отсутствуют налоги и таможенные барьеры. Правила проведения операций не кодифицируются, а устанавливаются самими участниками рынка. Операции с драгоценными металлами ...

Функции могут выполняться как с правами их создателя, так и с правами текущего пользователя.

Иногда функции отождествляются с хранимыми процедурами, однако между этими понятиями есть различие. С девятой версии возможно написание автономных блоков, которые позволяют выполнять код на процедурных языках без написания функций, непосредственно в клиенте.

Триггеры

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

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

Правила и представления

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

Индексы

В PostgreSQL имеется поддержка индексов следующих типов: B-дерево, хэш, R-дерево, GiST, GIN. При необходимости можно создавать новые типы индексов, хотя это далеко не тривиальный процесс. Индексы в PostgreSQL обладают следующими свойствами:

? возможен просмотр индекса не только в прямом, но и в обратном порядке — создание отдельного индекса для работы конструкции ORDER BY… DESC не нужно;

? возможно создание индекса над несколькими столбцами таблицы, в том числе над столбцами различных типов данных;

? индексы могут быть функциональными, то есть строиться не на базе набора значений некоего столбца / столбцов, а на базе набора значений функции от набора значений;

? индексы могут быть частичными, то есть строиться только по части таблицы (по некоторой её проекции); в некоторых случаях это помогает создавать намного более компактные индексы или достигать улучшения производительности за счёт использования разных типов индексов для разных (например, с точки зрения частоты обновления) частей таблицы;

? планировщик запросов может использовать несколько индексов одновременно для выполнения сложных запросов.

6 стр., 2861 слов

Программируемые логические контроллеры: типы и функции

... PLC; использование открытых протоколов; простота программирования и доступность широкого спектра программного ... при автоматизации промышленных и производственных процессов. ПЛК различных типов также применяются ... (APAX5570XPE/5571XPE), обеспечивая при этом гибкие функции ввода / вывода, повышающие масштабируемость системы. ... в России. В четырех последних строках указаны параметры для модулей дискретного ...

Многоверсионность (MVCC)

PostgreSQL поддерживает одновременную модификацию БД несколькими пользователями с помощью механизма Multiversion Concurrency Control (MVCC).

Благодаря этому соблюдаются требования ACID, и практически отпадает нужда в блокировках чтения.

Типы данных

PostgreSQL поддерживает большой набор встроенных типов данных:

? Численные типы

o Целые

o С фиксированной точкой

o С плавающей точкой

o Денежный тип (отличается специальным форматом вывода, а в остальном аналогичен числам с фиксированной точкой с двумя знаками после запятой)

? Символьные типы произвольной длины

? Двоичные типы (включая BLOB)

? Типы «дата / время» (полностью поддерживающие различные форматы, точность, форматы вывода, включая последние изменения в часовых поясах)

? Булев тип

? Перечисление

? Геометрические примитивы

? Сетевые типы

o IP и IPv6-адреса

o CIDR-формат

o MAC-адрес

? UUID-идентификатор

? XML-данные

? Массивы

? JSON

? Идентификаторы объектов БД

? Псевдотипы

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

2. Пользовательские объекты

PostgreSQL может быть расширен пользователем для собственных нужд практически в любом аспекте. Есть возможность добавлять собственные:

? Преобразования типов

? Типы данных

? Домены (пользовательские типы с изначально наложенными ограничениями)

? Функции (включая агрегатные)

? Индексы

? Операторы (включая переопределение уже существующих)

? Процедурные языки

Наследование

Таблицы могут наследовать характеристики и наборы полей от других таблиц (родительских).

При этом данные, добавленные в порождённую таблицу, автоматически будут участвовать (если это не указано отдельно) в запросах к родительской таблице.

Прочие возможности

? Соблюдение принципов ACID

? Соответствие стандартам ANSI SQL-92 и SQL-99

? Поддержка запросов с OUTER JOIN, UNION, UNION ALL, EXCEPT, INTERSECT и подзапросов

? Последовательности

? Контроль целостности

? Репликация

? Общие табличные выражения и рекурсивные запросы

? Аналитические функции

? Поддержка Юникода (UTF-8)

? Поддержка регулярных выражений в стиле Perl

? Встроенная поддержка SSL, SELinux и Kerberos

? Протокол разделяемых блокировок

? Подгружаемые расширения, поддерживающие SHA1, MD5, XML

? Расширения для написания сложных выборок, отчётов и т.д. (API открыт)

25 стр., 12160 слов

Типы профилей скважин и рекомендации по их выбору

... определяется, главным образом, только сопротивлением продольному перемещению бурильной колонны. Такой тип профиля скважин наиболее подходит для морских месторождений, когда требуется обеспечить добычу из ... и при наименьшем зенитном угле скважины получить сравнительно большое отклонение от вертикали. Четырехинтервальный тип профиля (рис. 9, г) включает вертикальный участок, участок набора зенитного ...

? Средства для генерации совместимого с другими системами SQL-кода и импорта из других систем

? Автономные блоки на доступных языках, а не только SQL

3. Надёжность

Согласно результатам автоматизированного исследования различного ПО на предмет ошибок, в исходном коде PostgreSQL было найдено 20 проблемных мест на 775 000 строк исходного кода (в среднем, одна ошибка на 39 000 строк кода).

Для сравнения: MySQL — 97 проблем, одна ошибка на 4 000 строк кода; FreeBSD (целиком) — 306 проблем, одна ошибка на 4 000 строк кода; Linux (только ядро) — 950 проблем, одна ошибка на 10 000 строк кода.

Заключение

PostgreSQL является полнофункциональной объектно-реляционной СУБД, готовой для практического использования. Ее функциональность и надежность обусловлены богатой историей развития, профессионализмом разработчиков и технологией тестирования, а ее перспективы заложены в ее расширяемости и свободной лицензии.