Что такое код postgres95


Содержание

Linux.yaroslavl.ru

Обучающее руководство по PostgreSQL
Предыдущий Глава 1. Введение Следующий

Объектно-реляционная система управления базами данных, теперь известная как PostgreSQL (и сокращённо называемая Postgres95 ) , происходит от пакета Postgres , написанного в Berkeley. После десятилетия разработки, PostgreSQL это наиболее прогрессивная база данных с открытыми исходными текстами, доступная везде, предлагает многовариантное управление параллелизмом, поддерживает почти все конструкции SQL (включая вложенную выборку, транзакции, и определяемые пользователем типы и функции), и имеет широкий ряд связей с языками (включая C, C++, Java, perl, tcl, и python).

Проект Berkeley Postgres

Реализация Postgres DBMS началась в 1986. Первоначальные концепции системы представлены в Задачи Postgres , а определение первоначальной модели данных показано в Модель данных Postgres . Проект правил системы для этого времени описывается в Проектирование системы правил Postgres . Логическое обоснование и архитектура администратора хранения описана в Система хранения Postgres .

Postgres за это время пережил несколько основных версий. Первая система «demoware» заработала в 1987 и была представлена в 1988 на ACM-SIGMOD конференции. Мы выпустили Версию 1, описываемую в Реализация Postgres , для нескольких внешних пользователей в июне 1989. В ответ на критику первого правила системы ( Комментарий к системе правил Postgres ), система правил была переконструирована ( О правилах, процедурах, кэшировании и представлениях в системах баз данных ) и Версия 2 увидела свет в июне 1990 с новой системой правил. Версия 3 появилась в 1991 и добавила поддержку для составного администратора хранения, улучшился исполнитель запросов, и была переписана система правил перезаписи. По большей части, после выпуска Postgres95 (смотри ниже) всё внимание было перенесено на портативность и надёжность.

Postgres использовался для реализации многих различных исследований и производства приложений. Среди них: система анализа финансовых данных, пакет контроля за производительностью реактивных двигателей, база данных передвижения астероидов и несколько географических информационных систем. Postgres также использовался как учебное пособие в нескольких университетах. Наконец, Illustra Information Technologies (потом слилась с Informix) подобрала код и коммерциализовала его. Позже, в 1992 году, Postgres стал первичным администратором данных для Sequoia 2000, научного вычислительного проекта.

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

В 1994 году, Andrew Yu и Jolly Chen добавили интерпретатор языка SQL в Postgres . Впоследствии, Postgres95 был запущен в паутину, найдя свой собственный путь в мир в качестве всеобщего достояния, как потомок с открытым исходным текстом, изначально бывшим Berkeley кодом Postgres .

Код Postgres95 был полностью на ANSI C и урезан в размере на 25%. Много внешних изменений улучшили производительность и обслуживаемость. Postgres95 v1.0.x запускался на 30-50% быстрее на Wisconsin Benchmark по сравнению с Postgres v4.2. Кроме исправленных багов, появились такие улучшения:


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

В дополнении к программе мониторинга, появилась программа ( psql ) , которая позволяла выполнять интерактивные запросы SQL, используя GNU readline .

Новая клиентская библиотека, libpgtcl , стала поддерживать клиентов основанных на Tcl . Пример на shell, pgtclsh, обеспечивал новые Tcl команды для связи tcl программ с Postgres95 сервером.

Взаимодействие с большими объектами было основательно перестроено. От перестановки больших объектов остался только механизм хранения больших объектов. (Перестановочная файловая система была удалена.)

Объектно-уровневое системное правило было удалено. Правила еще доступны как правила перезаписи.

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

Для сборки стал использоваться GNU make (вместо BSD make). Также, Postgres95 может быть скомпилирован с помощью непропатченного gcc (выравнивание данных типа double было исправлено).

В 1996 году, стало ясно, что название “Postgres95” не выдержало испытания временем. Мы выбрали новое имя, PostgreSQL , отражающее взаимосвязь между первоначальным Postgres и возможностями SQL в более новых версиях. В тоже время, мы установили нумерацию версий, начиная с 6.0, вернув нумерацию обратно к прежней последовательности изначально начатой проектом Postgres .

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

Основные улучшения в PostgreSQL включают:


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

Были реализованы важные свойства сервера, включая вложенную выборку, значения по умолчанию, ограничители, и триггеры.

Были добавлены дополнительные свойства языка SQL92 , включая первичные ключи, объявление идентификаторов, преобразование литерального строкового типа, приведение типа, и ввод двоичных и шестнадцатеричных целых.

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

Что такое код postgres95

пВЯЕЛФОП-ТЕМСГЙПООБС ухвд, Ч ОБУФПСЭЕЕ ЧТЕНС ЙЪЧЕУФОБС ЛБЛ PostgreSQL ЧЕДЈФ УЧПЕ РТПЙУИПЦДЕОЙЕ ПФ РБЛЕФБ POSTGRES , ЛПФПТЩК ВЩМ ОБРЙУБО Ч ДЕРБТФБНЕОФЕ вЕТЛМЙ, лБМЙЖПТОЙКУЛПЗП хОЙЧЕТУЙФЕФБ. вПМЕЕ ЮЕН ДЕУСФЙМЕФОСС ТБЪТБВПФЛБ PostgreSQL УДЕМБМБ ЬФПФ РТПДХЛФ ПДОПК ЙЪ ОБЙВПМЕЕ РТПДЧЙОХФЩИ ухвд У ПФЛТЩФЩН ЙУИПДОЩН ЛПДПН.

ухвд POSTGRES ВЩМБ ЙУРПМШЪПЧБОБ ДМС ТЕБМЙЪБГЙЙ НОПЗЙИ ТБЪМЙЮОЩИ ЙУУМЕДПЧБОЙК Й ОБРЙУБОЙС РТЙМПЦЕОЙК. уАДБ ЧПЫМЙ: УЙУФЕНБ БОБМЙЪБ ЖЙОБОУПЧЩИ ДБООЩИ, РБЛЕФ НПОЙФПТЙОЗБ РТПЙЪЧПДЙФЕМШОПУФЙ ТЕБЛФЙЧОЩИ ДЧЙЗБФЕМЕК, ВБЪБ ДБООЩИ РЕТЕНЕЭЕОЙК БУФЕТПЙДПЧ, ВБЪБ ДБООЩИ НЕДЙГЙОУЛПК ЙОЖПТНБГЙЙ Й ОЕУЛПМШЛП ЗЕПЗТБЖЙЮЕУЛЙИ ЙОЖПТНБГЙПООЩИ УЙУФЕН. ухвд POSTGRES ФБЛЦЕ ЙУРПМШЪПЧМБУШ ЛБЛ УТЕДУФЧП ПВХЮЕОЙС Ч ОЕУЛПМШЛЙИ ХОЙЧЕТУЙФЕФБИ. оБЛПОЕГ ЛПНРБОЙС Illustra Information Technologies (РПЪДОЕЕ ЧМЙЧЫБСУС Ч ЛПНРБОЙА Informix , ЛПФПТПК ФЕРЕТШ ЧМБДЕЕФ IBM ) ЧЪСМБ ЛПД ЬФПК ухвд Й ЛПННЕТГЙБМЙЪЙТПЧБМБ ЕЗП. POSTGRES УФБМ РТЙПТЙФЕФОЩН НЕОЕДЦЕТПН ДБООЩИ ДМС РТПЕЛФБ ОБХЮОЩИ ЧЩЮЙУМЕОЙК Sequoia 2000 РПУМЕ 1992 ЗПДБ.

тБЪНЕТ УППВЭЕУФЧБ РПМШЪПЧБФЕМЕК ЬФПЗП РТПДХЛФБ ХДЧПЙМУС Ч 1993 ЗПДХ. уФБМП ЧЕУШНБ ПЮЕЧЙДОП, ЮФП ПВУМХЦЙЧБОЙЕ РТПФПФЙРБ ЛПДБ Й ЕЗП РПДДЕТЦЛБ ЪБОЙНБАФ ЗПТБЪДП ВПМШЫЕ ЧТЕНЕОЙ, ЮЕН УБНЙ ЙУУМЕДПЧБОЙС Ч ПВМБУФЙ ВБЪ ДБООЩИ. рЩФБСУШ УОЙЪЙФШ ОБЗТХЪЛХ, УЧСЪБООХА У РПДДЕТЦЛПК, РТПЕЛФ вЕТЛМЙ POSTGRES ПЖЙГЙБМШОП РТЕЛТБФЙМ УЧПЈ УХЭЕУФЧПЧБОЙЕ У ЧЩИПДПН ЧЕТУЙЙ 4.2.

ч 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. ъБ ЙУЛМАЮЕОЙЕН ЙУРТБЧМЕОЙС ПЫЙВПЛ, ВЩМЙ УДЕМБОЩ УМЕДХАЭЙЕ УЕТШЈЪОЩЕ ТБУЫЙТЕОЙС:

дМС ЙОФЕТБЛФЙЧОЩИ SQL ЪБРТПУПЧ ВЩМБ РТЕДПУФБЧМЕОБ ОПЧБС РТПЗТБННБ ( psql ), ЛПФПТБС ЙУРПМШЪПЧБМБ ВЙВМЙПФЕЛХ GNU Readline . пОБ ЧЩФЕУОЙМБ УФБТХА РТПЗТБННХ monitor .

вЩМБ ФЭБФЕМШОП РЕТЕУНПФТЕОБ ТБВПФБ У ВПМШЫЙНЙ ПВЯЕЛФБНЙ. йОЧЕТУЙПООЩЕ ВПМШЫЙЕ ПВЯЕЛФЩ РТЕДУФБЧМСМЙ УПВПК ФПМШЛП НЕИБОЙЪН ДМС ИТБОЕОЙС ВПМШЫЙИ ПВЯЕЛФПЧ. (йОЧЕТУЙПООБС ЖБКМПЧБС УЙУФЕНБ ВЩМБ ХДБМЕОБ).

вЩМБ ХДБМЕОБ instance-level УЙУФЕНБ РТБЧЙМ. рТБЧЙМБ УФБМЙ ДПУФХРОЩ ЛБЛ РЕТЕРЙУЩЧБЕНЩЕ РТБЧЙМБ.

чНЕУФЕ У ЙУИПДОЩН ЛПДПН УФБМ РПУФБЧМСФШУС ЛТБФЛЙК ХЮЕВОЙЛ РП ПУПВЕООПУФСН ТБВПФЩ У SQL Ч Postgres95 .

ч 1996 ЗПДХ ВЩМП ТЕЫЕОП, ЮФП ЙНС «Postgres95» ОЕ УППФЧЕФУФЧХЕФ ОБУФПСЭЕНХ ЧТЕНЕОЙ. нЩ ЧЩВТБМЙ ОПЧПЕ ЙНС PostgreSQL ЮФПВЩ РПДЮЕТЛОХФШ ПФМЙЮЙЕ ПФ ПТЙЗЙОБМШОПЗП POSTGRES Й ЧЩИПД НОПЦЕУФЧБ ЧЕТУЙК У РПДДЕТЦЛПК SQL . ч ФПЦЕ ЧТЕНС, НЩ ХУФБОПЧЙМЙ ОХНЕТБГЙА ЧЕТУЙК ОБЮЙОБС У 6.0, ЧЕТОХЧЫЙУШ ПВТБФОП Л ОХНЕТБГЙЙ, ЛПФПТХА ОБЮБМЙ Ч РТПЕЛФЕ вЕТЛМЙ POSTGRES .

рТЙ ТБЪТБВПФЛЕ Postgres95 БЛГЕОФ УФБЧЙМУС ОБ ПВОБТХЦЕОЙЕ Й РПОЙНБОЙЕ УХЭЕУФЧХАЭЙИ РТПВМЕН Ч ЛПДЕ УЕТЧЕТБ. ч PostgreSQL БЛГЕОФ УНЕУФЙМУС ОБ ТБУЫЙТЕОЙЕ ЧПЪНПЦОПУФЕК Й УПЧНЕУФЙНПУФЙ РТЙ РТПДПМЦЕОЙЙ ТБВПФЩ ЧП ЧУЕИ ДТХЗЙИ ПВМБУФСИ.

рПДТПВОПУФЙ П ФПН, ЮФП РТПЙУИПДЙМП У ФЕИ РПТ У PostgreSQL , НПЦОП ОБКФЙ Ч Appendix E .

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

PostgreSQL

PostgreSQL
Создатели: Стоунбрейкер, Майкл
Разработчики: сообщество PostgreSQL
Выпущена: 1995 ; 24 years ago ( 1995 )
Предыдущий выпуск: 11.1 / 8 ноября 2020
Состояние разработки: Активное
Написана на: C
Операционная система: Windows, Linux, macOS, FreeBSD, OpenBSD, Solaris
Платформа: Кросс-платформенное программное обеспечение
Веб-сайт postgresql .org

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

Содержание

История

PostgreSQL создана на основе некоммерческой СУБД Postgres, разработанной как open-source проект в Калифорнийском университете в Беркли. К разработке Postgres, начавшейся в 1986 году, имел непосредственное отношение Майкл Стоунбрейкер, руководитель более раннего проекта Ingres, на тот момент уже приобретённого компанией Computer Associates. Название расшифровывалось как «Post Ingres», и при создании Postgres были применены многие уже ранее сделанные наработки.

Стоунбрейкер и его студенты разрабатывали новую СУБД в течение восьми лет с 1986 по 1994 год. За этот период в синтаксис были введены процедуры, правила, пользовательские типы и другие компоненты. В 1995 году разработка снова разделилась: Стоунбрейкер использовал полученный опыт в создании коммерческой СУБД Illustra, продвигаемой его собственной одноимённой компанией (приобретённой впоследствии компанией Informix), а его студенты разработали новую версию Postgres — Postgres95, в которой язык запросов POSTQUEL — наследие Ingres — был заменен на SQL.

Разработка Postgres95 была выведена за пределы университета и передана команде энтузиастов. Новая СУБД получила имя, под которым она известна и развивается в текущий момент — PostgreSQL. [Источник 2]

О продукте

PostgreSQL поддерживается на всех современных Unix системах (34 платформы), включая наиболее распространенные, такие как Linux, FreeBSD, NetBSD, OpenBSD, SunOS, Solaris, DUX, а также под macOS. Начиная с версии 8.X PostgreSQL работает в «native» режиме под MS Windows NT, Win2000, WinXP, Win2003. Известно, что есть успешные попытки работать с PostgreSQL под Novell Netware 6 и OS2.

PostgreSQL неоднократно признавалась базой года, например, Linux New Media AWARD 2004, 2003 Editors’ Choice Awards, 2004 Editors’ Choice Awards. [Источник 3]

PostgreSQL используется как полигон для исследований нового типа баз данных, ориентированных на работу с потоками данных — это проект TelegraphCQ, стартовавший в 2002 году в Беркли после успешного проекта Telegraph (название главной улицы в Беркли).

Основные возможности и функциональность

Надежность

Надежность PostgreSQL является проверенным и доказанным фактом и обеспечивается следующими возможностями:

Производительность

Производительность PostgreSQL основывается на использовании индексов, интеллектуальном планировщике запросов, тонкой системы блокировок, системе управления буферами памяти и кэширования, превосходной масштабируемости при конкурентной работе.

  • Поддержка индексов:
    • Стандартные индексы — B-tree, hash, R-tree, GiST (обобщенное поисковое дерево)
    • Частичные индексы (partial indices) — можно создавать индекс по ограниченному подмножеству значений, например, create index idx_partial on foo (x) where x > 0;
    • Функциональные индексы (expressional indices) позволяют создавать индексы используя значения функции от параметра, например, create index idx_functional on foo ( length(x) );
  • Планировщик запросов основывается на стоимости различных планов, учитывая множество факторов. Он предоставляет возможность пользователю отлаживать запросы и настраивать систему.
  • Система блокировок поддерживает блокировки на нижнем уровне, что позволяет сохранять высокий уровень конкурентности при защите целостности данных. Блокировка поддерживается на уровне таблиц и записей. На нижнем уровне, блокировка для общих ресурсов оптимизирована под конкретную ОС и архитектуру.
  • Управление буферами и кэширование используют сложные алгоритмы для поддержания эффективности использования выделенных ресурсов памяти.
  • Tablespaces (табличные пространства) для управления хранения данных на уровне объектов, таких как базы данных, схемы, таблицы и индексы. Это позволяет гибко использовать дисковое пространство и повышает надежность, производительность, а также способствует масштабируемости системы.
  • Масштабируемость основывается на описанных выше возможностях. Низкая требовательность PostgreSQL к ресурсам и гибкая система блокировок обеспечивают его шкалирование, в то время как индексы и управление буферами обеспечивают хорошую управляемость системы даже при высоких загрузках. [Источник 4]

Расширяемость

Расширяемость PostgreSQL означает, что пользователь может настраивать систему путем определения новых функций, агрегатов, типов,языков, индексов и операторов. Объектно-ориентированность PostgreSQL позволяет перенести логику приложения на уровень базы данных, что сильно упрощает разработку клиентов, так как вся бизнес логика находится в базе данных. Функции в PostgreSQL однозначно определяются названием, количеством и типами аргументов. [Источник 4]

Поддержка SQL

Кроме основных возможностей, присущих любой SQL базе данных, PostgreSQL поддерживает:

  • Очень высокий уровень соответствия ANSI SQL 92, ANSI SQL 99 и ANSI SQL 2003.
  • Схемы, которые обеспечивают пространство имен на уровне SQL. Схемы содержат таблицы, в них можно определять типы данных, функции и операторы. Используя полное имя объекта можно одновременно работать с несколькими схемами. Схемы позволяют организовать базы данных совокупность нескольких логических частей, каждая их которых имеет свою политику доступа, типы данных.
  • Subqueries — подзапросы (subselects), полная поддержка SQL92. Подзапросы делают язык SQL более гибким и зачастую более эффективным.
  • Outer Joins — внешние связки (LEFT,RIGHT, FULL)
  • Rules — правила, согласно которым модифицируется исходный запрос. Главное отличие от триггеров состоит в том, что rule работает на уровне запроса и перед исполнением запроса, а триггер — это реакция системы на изменение данных, т.е. триггер запускается в процессе исполнения запроса для каждой измененной записи (PER ROW). Правила используются для указания системе, какие действия надо произвести при попытке обновления view.
  • Cursors — курсоры, позволяют уменьшить трафик между клиентом и сервером, а также память на клиенте, если требуется получить не весь результат запроса, а только его часть.
  • Table Inheritance — наследование таблиц, позволяющее создавать объекты, которые наследуют структуру родительского объекта и добавлять свои специфические атрибуты.
  • Stored Procedures — серверные (хранимые) процедуры позволяют реализовывать бизнес логику приложения на стороне сервера. Кроме того, они позволяют сильно уменьшить трафик между клиентом и сервером.
  • Триггеры позволяют управлять реакцией системы на изменение данных (INSERT,UPDATE,DELETE), как перед самой операцией (BEFORE), так и после (AFTER). Во время выполнения триггера доступны специальные переменные NEW (запись, которая будет вставлена или обновлена) и OLD (запись перед обновлением).
  • Cluster table — упорядочивание записей таблицы на диске согласно индексу, что иногда за счет уменьшения доступа к диску ускоряет выполнение запроса. [Источник 4]

Типы данных

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

  • Булев тип
  • Численные типы
    • Целые
    • С фиксированной точкой
    • С плавающей точкой
    • Денежный тип (отличается специальным форматом вывода, а в остальном аналогичен числам с фиксированной точкой с двумя знаками после запятой)
  • Символьные типы произвольной длины
  • Двоичные типы
  • Типы «дата/время» (полностью поддерживающие различные форматы, точность, форматы вывода, включая последние изменения в часовых поясах)
  • Перечисление
  • Типы текстового поиска
  • Составные типы
  • HStore (расширение, добавляющее ключ-значение в PostgreSQL)
  • Массивы(различной длины и любого типа данных, включая текстовый и составной типы) размером до 1 Гбайта
  • Геометрические примитивы
  • Сетевые типы
    • IP и IPv6-адреса
    • CIDR-формат
    • MAC-адрес
  • XML-данные с поддержкой запросов XPath
  • UUID-идентификатор
  • JSON (начиная с версии 9.2) и более быстрый JSONB (начиная с версии 9.4)

Кроме того, пользователи могут создавать свои собственные типы данных, которые обычно можно полностью индексировать через инфраструктуру индексирования PostgreSQL — GiST, GIN, SP-GiST. К ним относятся типы данных географической информационной системы (ГИС) из проекта PostGIS для PostgreSQL.

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

Начиная с PostgreSQL 9.2, может использоваться тип данных, представляющий диапазон данных, которые называются типами диапазонов. Это могут быть дискретные диапазоны (например, все целые значения от 1 до 10) или непрерывные диапазоны (например, любой момент времени между 10:00 и 11:00). Доступные типы доступных диапазонов включают диапазоны целых чисел, большие целые числа, десятичные числа, отметки времени (с часовым поясом и без него) и даты.

Пользовательские типы диапазонов могут быть созданы для обеспечения доступности новых типов диапазонов, таких как диапазоны IP-адресов, с использованием типа inet в качестве базы или диапазонов с плавающей точкой, используя тип данных float в качестве базы. Типы диапазонов поддерживают включенные и исключительные границы диапазона, используя символы и () соответственно. (например, представляет все целые числа, начиная с 4 включительно, но не включая 9.) Типы диапазонов также совместимы с существующими операторами, используемыми для проверки наложения, сдерживания, права и т. д. [Источник 4]

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

Таблицы могут наследовать свои характеристики от «родительской» таблицы. Данные в дочерних таблицах будут существовать в родительских таблицах, если данные не выбираются из родительской таблицы, с помощью ключевого слова ONLY, т.е. SELECT * FROM ONLY parent_table; . Добавление столбца в родительскую таблицу будет причиной того, что столбец появится в дочерней таблице.

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

По состоянию на 2010, эта функция поддерживается не полностью, но, в частности, таблица ограничений в настоящее время не наследуемая. Все проверочные ограничения и ненулевые ограничения на родительской таблице автоматически наследуются его детьми. Другие типы ограничений (уникальные, первичный ключ, и иностранные ключевые ограничения) не наследуются.

Наследование обеспечивает способ отображения особенности иерархий обобщения, изображенных на сущность-связь диаграммах (ERD) непосредственно в базе данных PostgreSQL [Источник 4]

Функции запроса

  1. Операции
  2. Полнотекстовый поиск
  3. Просмотры
  4. Материализованные взгляды
  5. Обновляемые виды
  6. Рекурсивные взгляды
  7. Внутренний, внешний (полный, левый и правый) и крест- соединения
  8. Суб выбирает
  9. Коррелированные подзапросы
  10. Регулярные выражения
  11. Общие выражения таблиц и записываемые общие табличные выражения
  12. Зашифрованные соединения через TLS (текущие версии не используют уязвимый SSL, даже с этой конфигурацией)
  13. Домены
  14. Точки сохранения
  15. Двухфазное принятие
  16. TOAST ( метод хранения с ограниченными возможностями ) используется для прозрачного хранения больших атрибутов таблицы (таких как большие вложения MIME или XML-сообщения) в отдельной области с автоматическим сжатием.
  17. Встроенный SQL реализован с использованием препроцессора. Код SQL сначала записывается в C-код. Затем код запускается через препроцессор ECPG, который заменяет SQL на вызовы в библиотеку кода. Затем код может быть скомпилирован с использованием компилятора C. Встраивание работает также с C++, но не распознает все конструкции C++. [Источник 4]
Илон Маск рекомендует:  Что такое код mb_ereg

Поддержка стандартов, возможности, особенности

PostgreSQL PostgreSQL поддерживает большинство возможностей стандарта SQL: 2011, ACID-совместимая и транзакционная (включая большинство DDL утверждения) избегает проблемы блокировки с помощью механизма Многоверсионное управление параллельным доступом (MVCC), обеспечивает иммунитет к «грязному» чтению и полую сериализационность; управляет комплексными SQL запросами используя множество индексированных методов, которые недоступны в других базах данных; имеет обновляемые представления и материализованные представления, триггеры, внешние ключи; поддерживает функции и хранимые процедуры, и другие возможности расширения, и имеет множество расширений, написанных третьими лицами. В дополнение к возможности работы с основными фирменными и с открытым исходным кодом базами данных, PostgreSQL поддерживает миграцию из них, путем своей обширной поддержки стандарта SQL и доступных инструментов миграции. Фирменные расширения в базах данных, таких как Oracle можно эмулировать с помощью встроенных и сторонних расширений совместимости с открытым исходным кодом. Последние версии также обеспечивают репликацию самой базы данных для доступности и масштабируемости.

PostgreSQL является кросплотформенной и работает на множестве операционных систем, включая Linux, FreeBSD, macOS, Solaris, и Microsoft Windows. Начиная с Mac OS X 10.7 Lion Server, PostgreSQL это стандартная база данных по умолчанию, и клиентские инструменты PostgreSQL идут в комплекте с настольной версией. Подавляющее большинство дистрибутивов Linux имеет PostgreSQL доступным в поддерживаемых пакетах.

PostgreSQL разработан PostgreSQL Global Development Group, разнообразной группой из многих компаний и отдельных вкладчиков. Это свободное и открытое программное обеспечение, распространяемое по условиям Лицензии PostgreSQL, разрешительной лицензии свободного программного обеспечения.

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

На данный момент (версия 9.4.5), в PostgreSQL имеются следующие ограничения: [Источник 5]

Максимальный размер базы данных Нет ограничений
Максимальный размер таблицы 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 и PL/V8, а также имеется поддержка загрузки C-совместимых модулей [Источник 4] ;
  • поддержка со стороны многих языков программирования: C\C++, Java, Perl, Python, Ruby, ECPG, Tcl, PHP и других.
  • наследование;
  • легкая расширяемость.

Разработка

PostgreSQL развивается силами международной группы разработчиков (PGDG), в которую входят как непосредственно программисты, так и те, кто отвечают за продвижение PostgreSQL (Public Relation), за поддержание серверов и сервисов, написание и перевод документации, всего на 2005 год насчитывается около 200 человек. Другими словами, PGDG — это сложившийся коллектив, который полностью самодостаточен и устойчив. Проект развивается по общепринятой среди открытых проектов схеме, когда приоритеты определяются реальными нуждами и возможностями. При этом, практикуется публичное обсуждение всех вопросов в списке рассылке, что практически исключает возможность неправильных и несогласованных решений.

Это относится и к тем предложениям, которые уже имеют или рассчитывают на финансовую поддержку коммерческих компаний.

Цикл работой над новой версией обычно длится 10-12 месяцев (сейчас ведется дискуссия о более коротком цикле 2-3 месяца) и состоит из нескольких этапов. [Источник 1]

Другие функции хранения

Ограничения ссылочной целостности, включая ограничения внешнего ключа, ограничения столбцов и проверки строк Двоичное и текстовое хранилище больших объектов Табличные Сравнение столбцов Онлайн-резервная Восстановление по времени, реализованное с использованием записи на основе записи Обновление на месте с помощью pg_upgrade за меньшее время простоя (поддерживает обновления с 8.3.x и выше) [Источник 1]

Установка и настройка

В данном разделе представлена инструкция по установки и настройке PostgreSQL для разных ОС [Источник 6]

Установка

Если установка происходит на macOS, то процесс установки можно запустить командой: [Источник 7]

На Linux СУБД устанавливается так:

После того, как все загружено и установлено, можно проверить, все ли в порядке, и какая стоит версия PostgreSQL. Для этого выполните следующую команду:

Инструкция по установке в цифровом формате

Настройка

Работа с PostgreSQL может быть произведена через командную строку (терминал) с использованием утилиты psql – инструмент командной строки PostgreSQL. [Источник 7]

Необходимо ввести следующую команду:

Этой командой запускается утилита psql. Хотя есть много сторонних инструментов для администрирования PostgreSQL, нет необходимости их устанавливать, т. к. psql удобен и отлично работает.

Если нужна помощь, введите \help (или -h ) в psql-терминале. Появится список всех доступных параметров справки. Вы можете ввести \help [имя команды], если вам нужна помощь по конкретной команде. Например, если ввести \help UPDATE в консоли psql, отобразится синтаксис команды update .

Для начала необходимо проверить наличие существующих пользователей и баз данных. Выполните следующую команду, чтобы вывести список всех баз данных:

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

Чтобы вывести список всех пользователей, выполните команду \du . Атрибуты пользователя postgres говорят нам, что он суперпользователь.

Основные операции с БД

Чтобы выполнять базовые действия в СУБД, нужно знать язык запросов к базе данных SQL.

Создание базы данных

Для создания базы данных используется команда: [Источник 7]

В приведенном ниже примере создается база данных с именем proglib_db.

Если забыть точку с запятой в конце запроса, знак «=» в приглашении postgres заменяется на «-». Это зачастую указывает на то, что необходимо завершить (дописать) запрос.

На рисунке 4 видно сообщение об ошибке из-за того, что в нашем случае база уже создана.

Создание нового юзера

Для создания пользователя существует команда:

В приведенном ниже примере создается пользователь с именем author.

При создании пользователя отобразится сообщение CREATE ROLE. Каждый пользователь имеет свои права (доступ к базам, редактирование, создание БД / пользователей и т. д.). Вы могли заметить, что столбец Attributes для пользователя author пуст. Это означает, что пользователь author не имеет прав администратора. Он может только читать данные и не может создать другого пользователя или базу.

Можно установить пароль для существующего пользователя. [Источник 7]

С этой задачей справится команда \password :

Чтобы задать пароль при создании пользователя, можно использовать следующую команду:

Удаление базы или пользователя

Для этой операции используется команда drop : она умеет удалять как пользователя, так и БД. [Источник 7]

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

Если вы укажете psql postgres (без имени пользователя), то postgreSQL пустит вас под стандартным суперюзером (postgres). Чтобы войти в базу данных под определенным пользователем, можно использовать следующую команду:

Войдем в базу proglib_db под пользователем author. Выполним команду \q , чтобы выйти из текущей БД, а затем выполните следующую команду:

15 полезных команд PostgreSQL

В сети много руководств по PostgreSQL, которые описывают основные команды. Но при погружении глубже в работу возникают такие практические вопросы, для которых требуются продвинутые команды.

Такие команды, или сниппеты, редко описаны в документации. Рассмотрим несколько на примерах, полезных как для разработчиков, так и для администраторов баз данных.

Получение информации о базе данных

Размер базы данных


Чтобы получить физический размер файлов (хранилища) базы данных, используем следующий запрос:

Результат будет представлен как число вида 41809016 .

current_database() — функция, которая возвращает имя текущей базы данных. Вместо неё можно ввести имя текстом:

Для того, чтобы получить информацию в человекочитаемом виде, используем функцию pg_size_pretty :

В результате получим информацию вида 40 Mb .

Перечень таблиц

Иногда требуется получить перечень таблиц базы данных. Для этого используем следующий запрос:

information_schema — стандартная схема базы данных, которая содержит коллекции представлений (views), таких как таблицы, поля и т.д. Представления таблиц содержат информацию обо всех таблицах баз данных.

Запрос, описанный ниже, выберет все таблицы из указанной схемы текущей базы данных:

В последнем условии IN можно указать имя определенной схемы.

Размер таблицы

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

Функция pg_relation_size возвращает объём, который занимает на диске указанный слой заданной таблицы или индекса.

Имя самой большой таблицы

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

Для того, чтобы вывести информацию о самой большой таблице, ограничим запрос с помощью LIMIT :

relname — имя таблицы, индекса, представления и т.п.
relpages — размер представления этой таблицы на диске в количествах страниц (по умолчанию одна страницы равна 8 Кб).
pg_class — системная таблица, которая содержит информацию о связях таблиц базы данных.

Перечень подключенных пользователей

Чтобы узнать имя, IP и используемый порт подключенных пользователей, выполним следующий запрос:

Активность пользователя

Чтобы узнать активность соединения конкретного пользователя, используем следующий запрос:

Работа с данными и полями таблиц

Удаление одинаковых строк

Если так получилось, что в таблице нет первичного ключа (primary key), то наверняка среди записей найдутся дубликаты. Если для такой таблицы, особенно большого размера, необходимо поставить ограничения (constraint) для проверки целостности, то удалим следующие элементы:

  • дублирующиеся строки,
  • ситуации, когда одна или более колонок дублируются (если эти колонки предполагается использовать в качестве первичного ключа).

Рассмотрим таблицу с данными покупателей, где задублирована целая строка (вторая по счёту).

Удалить все дубликаты поможет следующий запрос:

Уникальное для каждой записи поле ctid по умолчанию скрыто, но оно есть в каждой таблице.

Последний запрос требователен к ресурсам, поэтому будьте аккуратны при его выполнении на рабочем проекте.

«КРОК», Москва, Санкт-Петербург, Троицк, Челябинск, Воронеж, Иркутск, Краснодар, Нижний Новгород, Самара, Пермь, от 120 000 до 240 000 ₽

Теперь рассмотрим случай, когда повторяются значения полей.

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

Если данные важны, то сначала нужно найти записи с дубликатами:

Перед удалением такие записи можно перенести во временную таблицу или заменить в них значение customer_id на другое.

Общая форма запроса на удаление описанных выше записей выглядит следующим образом:

Безопасное изменение типа поля

Может возникнуть вопрос о включении в этот список такой задачи. Ведь в PostgreSQL изменить тип поля очень просто с помощью команды ALTER . Давайте для примера снова рассмотрим таблицу с покупателями.

Для поля customer_id используется строковый тип данных varchar . Это ошибка, так как в этом поле предполагается хранить идентификаторы покупателей, которые имеют целочисленный формат integer . Использование varchar неоправданно. Попробуем исправить это недоразумение с помощью команды ALTER :

Но в результате выполнения получим ошибку:

ERROR: column “customer_id” cannot be cast automatically to type integer
SQL state: 42804
Hint: Specify a USING expression to perform the conversion.

Это значит, что нельзя просто так взять и изменить тип поля при наличии данных в таблице. Так как использовался тип varchar , СУБД не может определить принадлежность значения к integer . Хотя данные соответствуют именно этому типу. Для того, чтобы уточнить этот момент, в сообщении об ошибке предлагается использовать выражение USING , чтобы корректно преобразовать наши данные в integer :

В результате всё прошло без ошибок:

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

Например, преобразуем поле customer_id обратно в varchar , но с преобразованием формата данных:

В результате таблица примет следующий вид:

Поиск «потерянных» значений

Будьте внимательны при использовании последовательностей (sequence) в качестве первичного ключа (primary key): при назначении некоторые элементы последовательности случайно пропускаются, в результате работы с таблицей некоторые записи удаляются. Такие значения можно использовать снова, но найти их в больших таблицах сложно.

Рассмотрим два варианта поиска.

Первый способ
Выполним следующий запрос, чтобы найти начало интервала с «потерянным» значением:

В результате получим значения: 5 , 9 и 11 .

Если нужно найти не только первое вхождение, а все пропущенные значения, используем следующий (ресурсоёмкий!) запрос:

В результате видим следующий результат: 5 , 9 и 6 .

Второй способ
Получаем имя последовательности, связанной с customer_id :

И находим все пропущенные идентификаторы:

Подсчёт количества строк в таблице

Количество строк вычисляется стандартной функцией count , но её можно использовать с дополнительными условиями.

Общее количество строк в таблице:

Количество строк при условии, что указанное поле не содержит NULL :

Количество уникальных строк по указанному полю:

Использование транзакций

Транзакция объединяет последовательность действий в одну операцию. Её особенность в том, что при ошибке в выполнении транзакции ни один из результатов действий не сохранится в базе данных.

Начнём транзакцию с помощью команды BEGIN .

Для того, чтобы откатить все операции, расположенные после BEGIN , используем команду ROLLBACK .

А чтобы применить — команду COMMIT .

Просмотр и завершение исполняемых запросов

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

Для того, чтобы остановить конкретный запрос, выполним следующую команду, с указанием id процесса (pid):

Для того, чтобы прекратить работу запроса, выполним:

Работа с конфигурацией

Поиск и изменение расположения экземпляра кластера

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

Изменим расположение на другое с помощью команды:

Но для того, чтобы изменения вступили в силу, требуется перезагрузка.

Получение перечня доступных типов данных

Получим перечень доступных типов данных с помощью команды:

typname — имя типа данных.
typlen — размер типа данных.

Изменение настроек СУБД без перезагрузки

Настройки PostgreSQL находятся в специальных файлах вроде postgresql.conf и pg_hba.conf . После изменения этих файлов нужно, чтобы СУБД снова получила настройки. Для этого производится перезагрузка сервера баз данных. Понятно, что приходится это делать, но на продакшн-версии проекта, которым пользуются тысячи пользователей, это очень нежелательно. Поэтому в PostgreSQL есть функция, с помощью которой можно применить изменения без перезагрузки сервера:

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

Мы рассмотрели команды, которые помогут упростить работу разработчикам и администраторам баз данных, использующим PostgreSQL. Но это далеко не все возможные приёмы. Если вы сталкивались с интересными задачами, напишите о них в комментариях. Поделимся полезным опытом!

PostgreSQL 9.5 by Software Collections

rh-postgresql95 — A recent stable release of PostgreSQL. This version provides a number of new features and enhancements:

INSERT operations that would generate constraint conflicts are now allowed to be turned into UPDATE operations or ignored (UPSERT operations)

GROUP BY analysis features have been added: GROUPING SETS, CUBE, and ROLLUP

Row-level security control has been added

Mechanisms for tracking the progress of replication have been created, including methods for identifying the origin of individual changes during logical replication

Block Range Indexes (BRIN) have been added

Substantial performance improvements for sorting

Substantial performance improvements for multi-CPU machines

EL6 tests EL7 tests

Instructions

You can get started in three easy steps:

At this point you should be able to use PostgreSQL just as a normal application. Here are some examples of commands you can run:

Since su and sudo commands clear environment variables, we need to run scl enable once again for example after switching to postgres user role:

In order to view the individual components included in this collection, including additional subpackages, you can run:

PostgreSQL Software Collection as Docker Formatted Container

On CentOS 7 and RHEL 7 you can pull the image with the following command:

For more on the docker image follow the link to public source repository: https://github.com/sclorg/postgresql-container

Policy

Community Project: Maintained by upstream communities of developers. The software is cared for, but the developers make no commitments to update the repositories in a timely manner.

Yum Repositories

yum install centos-release-scl-rh

yum install centos-release-scl-rh

yum-config-manager —enable rhel-server-rhscl-6-rpms

yum-config-manager —enable rhel-server-rhscl-7-rpms

Rh-postgresql95-postgresql-server Download for Linux (rpm, x86_64)

Download rh-postgresql95-postgresql-server linux packages for CentOS.

Operating system Package with repo Browse files
CentOS 6 x86_64
CentOS 7 x86_64
RHEL 6
RHEL 7
CentOS SCLo RH x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el7.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-4.el7.x86_64.rpm The programs needed to create and run a PostgreSQL server
CentOS SCLo RH Testing x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el7.x86_64.rpm The programs needed to create and run a PostgreSQL server
CentOS SCLo RH x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-4.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.7-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.4-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.2-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
CentOS SCLo RH Testing x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-4.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.7-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.4-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.2-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.1-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server

rh-postgresql95-postgresql-server latest versions: 9.5.14, 9.5.9, 9.5.7, 9.5.4, 9.5.2, 9.5.1

rh-postgresql95-postgresql-server architectures: x86_64

rh-postgresql95-postgresql-server linux packages: rpm

DelphiSite

Наиболее читаемое

Обучающее руководство по PostgreSQL

Обучающее руководство по PostgreSQL

Обучающее руководство по PostgreSQL
Команда разработчиков PostgreSQL
Под редакцией
Thomas Lockhart
Авторское право на PostgreSQL принадлежит Postgres Global Development Group
Резюме
Postgres изначально разрабатывался в UC Berkeley Computer Science Department, цитадели многих объектно-реляционных концепций, теперь ставших доступными в некоторых коммерческих базах данных. Он обеспечивает поддержку языка SQL92/SQL3, целостность транзакций и расширяемость типов. PostgreSQL является всеобщим достоянием, потомком с открытыми исходными текстами этого оригинального кода Berkeley.
Глава 1. Введение
Оглавление
Что такое Postgres?
Краткая история Postgres
Об этой версии
Ресурсы
Терминология
Нотация
О Y2K
Авторские права и торговые марки
Этот документ является пользовательским руководством для систем управления базами данных PostgreSQL, изначально разработанной в калифорнийском университете Berkeley. PostgreSQL основан на Postgres версии 4.2. Проект Postgres ,возглавляемый профессором Michael Stonebraker, был субсидирован в рамках министерства обороны агентством по перспективным научным проектам (DARPA), Army Research Office (ARO), национальным научным фондом (NSF), и ESL, Inc.
Что такое Postgres?
Традиционные реляционные системы управления базами данных (DBMSs) поддерживают модель данных, состоящую из набора именованных отношений, содержащих атрибуты определенных типов. В настоящий момент, коммерческие системы включают такие возможные типы: числа с плавающей точкой, целые, строки символов, денежную единицу и даты. Обычно признаётся, что эта модель недостаточна для работы приложений с типами данных, которые появятся в будущем. Реляционная модель успешно замещает предыдущие модели, в частности, из-за её «спартанской простоты». Однако иногда, эта простота часто делает реализацию некоторых приложений очень сложной. Postgres предлагает значительную дополнительную мощность, объединяя следующие четыре дополнительные концепции с основными таким образом, что пользователи могут легко расширить систему:
классы
наследование
типы
функции
Прочие свойства обеспечивают дополнительную мощность и гибкость:
ограничения
триггеры
правила
целостность транзакций
Из-за этих свойств Postgres относят к категории баз данных, называемых объектно-реляционными. Обратите внимание, что они отличаются от так называемых объектно-ориентированных, которые, в общем, плохо подходят для традиционных языков реляционных баз данных. Но хотя Postgres и имеет некоторые объектно-ориентированные свойства, он остаётся в мире реляционных баз данных. Фактически, некоторые новые коммерческие базы данных включают свойства, открытые Postgres.
Краткая история Postgres
Объектно-реляционная система управления базами данных, теперь известная как PostgreSQL (и сокращённо называемая Postgres95) , происходит от пакета Postgres , написанного в Berkeley. После десятилетия разработки, PostgreSQL это наиболее прогрессивная база данных с открытыми исходными текстами, доступная везде, предлагает многовариантное управление параллелизмом, поддерживает почти все конструкции SQL (включая вложенную выборку, транзакции, и определяемые пользователем типы и функции), и имеет широкий ряд связей с языками (включая C, C++, Java, perl, tcl, и python).
Проект Berkeley Postgres
Реализация Postgres DBMS началась в 1986. Первоначальные концепции системы представлены в Задачи Postgres, а определение первоначальной модели данных показано в Модель данных Postgres. Проект правил системы для этого времени описывается в Проектирование системы правил Postgres. Логическое обоснование и архитектура администратора хранения описана в Система хранения Postgres.
Postgres за это время пережил несколько основных версий. Первая система «demoware» заработала в 1987 и была представлена в 1988 на ACM-SIGMOD конференции. Мы выпустили Версию 1, описываемую в Реализация Postgres, для нескольких внешних пользователей в июне 1989. В ответ на критику первого правила системы (Комментарий к системе правил Postgres), система правил была переконструирована (О правилах, процедурах, кэшировании и представлениях в системах баз данных) и Версия 2 увидела свет в июне 1990 с новой системой правил. Версия 3 появилась в 1991 и добавила поддержку для составного администратора хранения, улучшился исполнитель запросов, и была переписана система правил перезаписи. По большей части, после выпуска Postgres95 (смотри ниже) всё внимание было перенесено на портативность и надёжность.
Postgres использовался для реализации многих различных исследований и производства приложений. Среди них: система анализа финансовых данных, пакет контроля за производительностью реактивных двигателей, база данных передвижения астероидов и несколько географических информационных систем. Postgres также использовался как учебное пособие в нескольких университетах. Наконец, Illustra Information Technologies (потом слилась с Informix) подобрала код и коммерциализовала его. Позже, в 1992 году, Postgres стал первичным администратором данных для Sequoia 2000, научного вычислительного проекта.
Размер сообщества внешних пользователей в течении 1993 года практически удвоился. Становилось всё больше и больше понятно, что сопровождение прототипа кода и поддержка заберут большое количество времени, которое должно было быть посвящено исследованию баз данных. Из-за этого напряжения сократилась поддержка на накладные расходы, и проект официально прекратился с версией 4.2.
Postgres95
В 1994 году, Andrew Yu и Jolly Chen добавили интерпретатор языка SQL в Postgres. Впоследствии, Postgres95 был запущен в паутину, найдя свой собственный путь в мир в качестве всеобщего достояния, как потомок с открытым исходным текстом, изначально бывшим Berkeley кодом Postgres .
Код Postgres95 был полностью на ANSI C и урезан в размере на 25%. Много внешних изменений улучшили производительность и обслуживаемость. Postgres95 v1.0.x запускался на 30-50% быстрее на Wisconsin Benchmark по сравнению с Postgres v4.2. Кроме исправленных багов, появились такие улучшения: ·Язык запросов Postquel был заменён на SQL (реализован в сервере). Подзапросы не поддерживались до PostgreSQL (смотри ниже), но они могли быть съимитированы в Postgres95 с помощью функций SQL, определённых пользователем. Сложные функции были реализованы заново. Также был добавлен пункт поддержки запросов GROUP BY. Для программ на C остался доступен интерфейс <>. ·В дополнении к программе мониторинга, появилась программа (psql) , которая позволяла выполнять интерактивные запросы SQL, используя GNU readline. ·Новая клиентская библиотека, libpgtcl, стала поддерживать клиентов основанных на Tcl. Пример на shell, pgtclsh, обеспечивал новые Tcl команды для связи tcl программ с Postgres95 сервером. ·Взаимодействие с большими объектами было основательно перестроено. От перестановки больших объектов остался только механизм хранения больших объектов. (Перестановочная файловая система была удалена.) ·Объектно-уровневое системное правило было удалено. Правила еще доступны как правила перезаписи. ·Вместе с исходным кодом стало распространяться краткое обучающее руководство по официальным возможностям SQL, работающим в Postgres95. ·Для сборки стал использоваться GNU make (вместо BSD make). Также, Postgres95 может быть скомпилирован с помощью непропатченного gcc (выравнивание данных типа double было исправлено).
PostgreSQL
В 1996 году, стало ясно, что название “Postgres95” не выдержало испытания временем. Мы выбрали новое имя, PostgreSQL, отражающее взаимосвязь между первоначальным Postgres и возможностями SQL в более новых версиях. В тоже время, мы установили нумерацию версий, начиная с 6.0, вернув нумерацию обратно к прежней последовательности изначально начатой проектом Postgres.
При разработке Postgres95 акцент делался на установление и понимание существующих проблем в коде сервера. В PostgreSQL акцент был сдвинут на прибавление свойств и возможностей, хотя работа продолжалась во всех областях.
Основные улучшения в PostgreSQL включают: ·Блокировка на уровне таблиц была заменена на многовариантное управление параллелизмом, который позволяет читающему продолжать чтение согласованных данных во время деятельности пишущего и разрешает горячее резервирование из pg_dump, и то же время база данных остаётся доступной для запросов. ·Были реализованы важные свойства сервера, включая вложенную выборку, значения по умолчанию, ограничители, и триггеры. ·Были добавлены дополнительные свойства языка SQL92, включая первичные ключи, объявление идентификаторов, преобразование литерального строкового типа, приведение типа, и ввод двоичных и шестнадцатеричных целых. ·Были улучшены встроенные типы, включая новые широкомасштабные типы даты/время и поддержка дополнительных геометрических типов. ·Скорость всего кода сервера была увеличена приблизительно на 20-40%, и время запуска сервера было уменьшено на 80%, начиная с выпуска v6.0.
Терминология
В последующем тексте, термин сайтозначает хост машину, на которой установлен Postgres. Т.к. возможно установить более одной базы данных Postgres на один хост, то этот термин более точно указывает на любой отдельный набор установленных исполняемых файлов и баз данных Postgres.
Суперпользователь Postgres — это имя пользователя postgres, которому принадлежат исполняемые и файлы баз данных Postgres. Для суперпользователя, все механизмы защиты пропускаются и доступны любые произвольные данные.К тому же, суперпользователю Postgres позволено запускать некоторые программы поддержки, которые, в основном, недоступны для всех пользователей. Заметим, что суперпользователь Postgres — это не суперпользователь Unix (на который будем ссылаться как на root). Суперпользователь должен иметь не нулевой идентификатор пользователя (UID) по причинам безопасности.
Администратор базы данных или DBA — это человек, который отвечает за установку механизмов Postgres в соответствии с политикой безопасности сайта. DBA может добавлять новых пользователей по методике, описанной ниже и поддерживать набор шаблонов баз данных для использования с createdb.
postmaster — это процесс, который работает как расчётная палата для запросов к системе Postgres. Клиентские приложения подключаются к postmaster, который отслеживает любые системные ошибки и взаимодействие с процессами сервера. postmaster может принимать некоторые аргументы из командной строки для настройки своего поведения. Однако, указывать аргументы необходимо только если ты намереваешься запускаться на нескольких сайтах или не на сайте по умолчанию.
Сервер Postgres (т.е. исполняемая программа postgres) может быть запущена прямо из пользовательского shell суперпользователем Postgres (с именем базы данных в качестве аргумента). Однако, из-за этого не принимается во внимание разделяемый буферный пул и блокировка таблиц, связанных с postmaster/сайтом, поэтому это не рекомендуется на многопользовательском cайте.
Нотация
“. ” или /usr/local/pgsql/ в начале имени файла используются для представления пути к домашнему каталогу суперпользователя Postgres.
В командном синтаксисе, скобки (“[” и “]”) показывают, что выражение или ключевое слово необязательны. Всё в фигурных скобках (“<” и “>”) и содержащие вертикальные штрихи (“|”) показывают, что ты можешь выбрать из них что-то одно.
В примерах, круглые скобки (“(” и “)”) используются для группировки логических выражений. “|” — это логический оператор OR.
В примерах показано выполнение команд из различных бюджетов и программ. Команды, выполняемые из бюджета root предваряются “>”. Команды, выполняемые из бюджета суперпользователя Postgres предваряются “%”, в то время как команды выполняемые из бюджета непревелигерованных пользователей предваряются “$”. Команды SQL предваряются “=>” или не имеют приглашения, в зависимости от смысла.
Глава 2. SQL
Оглавление
Реляционная модель данных
Формальное описание реляционной модели данных
Операции в реляционной модели данных
Язык SQL
Эта глава изначально появилась как часть диссертации Stefan Simkovicss (Simkovics, 1998).
SQL стал наиболее популярным реляционным языком запросов. Название “SQL” это абривиатура Язык структурированных запросов. В 1974 году Donald Chamberlin и другие в IBM Research разработали язык SEQUEL (Язык английских структурированных запросов). Этот язык был впервые реализован в прототипе IBM названном SEQUEL-XRM в 1974-75 годах. В 1976-77 годах зародилась пересмотренная версия SEQUEL называемая SEQUEL/2 и впоследствии название было изменено на SQL.
В 1977 году был разработан новый прототип, названный System R. System R реализовывал большое подмножество SEQUEL/2 (сейчас SQL) и в течении проекта SQL было сделано много изменений. System R была установлена на многих пользовательских сайтах, как на внутренних сайтах IBM так и на некоторых выбранных клиентских сайтах. Благодаря успеху и приёму System R на этих пользовательских сайтах IBM начала разрабатывать коммерческие продукты, которые реализовывали язык SQL, основанный на технологии System R.
Через несколько лет IBM и еще несколько других продавцов анонсировали такие SQL продукты как SQL/DS(IBM), DB2 (IBM), ORACLE (Oracle Corp.), DG/SQL (Data General Corp.), и SYBASE (Sybase Inc.).

Rh-postgresql95-postgresql-server Download for Linux (rpm, x86_64)

Download rh-postgresql95-postgresql-server linux packages for CentOS.

CentOS SCLo RH x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el7.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-4.el7.x86_64.rpm The programs needed to create and run a PostgreSQL server
CentOS SCLo RH Testing x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el7.x86_64.rpm The programs needed to create and run a PostgreSQL server
CentOS SCLo RH x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-4.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.7-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.4-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.2-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
CentOS SCLo RH Testing x86_64
rh-postgresql95-postgresql-server-9.5.14-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-4.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.9-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.7-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.4-1.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.2-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server
rh-postgresql95-postgresql-server-9.5.1-2.el6.x86_64.rpm The programs needed to create and run a PostgreSQL server

rh-postgresql95-postgresql-server latest versions: 9.5.14, 9.5.9, 9.5.7, 9.5.4, 9.5.2, 9.5.1

rh-postgresql95-postgresql-server architectures: x86_64

rh-postgresql95-postgresql-server linux packages: rpm

LXF85:PostgreSQL

Подписка на печатную версию Весь 2015 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров) Подписка на электронную версию Весь 2015 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров) Подшивки старых номеров журнала (печатные версии) Весь 2014 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров)
PostgreSQL
  • Часть 1: Первое знакомство
  • Часть 2: Работа с базой
  • Часть 3: Возможности
  • Часть 4: Программные интерфейсы
  • Часть 5: Настраиваем сервер
  • Часть 6: Дополнительные главы

Разве же так можно? Разве же такие вещи алгоритмизируешь? Магнус Ф. Редькин об определениях счастья. «Понедельник начинается в субботу»

Новая информация добывается потом и кровью. Чтобы не утерять найденное, ее надо сохранить. А чтобы потом суметь найти необходимое, ее следует структурировать. PostgreSQL предназначен для постоянного [1] хранения структурированных данных [2]

Содержание

Это кто такой?

PostgreSQL – это реляционная база данных. PostgreSQL – это программный продукт с открытым исходным кодом и свободной (в прямом смысле этого слова) лицензией. Собственно говоря, этим все сказано.

Реляционная база данных

Информация в реляционных базах данных хранится в виде обычных плоских двумерных таблиц. Доступ к данным в таблице можно получить по ее имени. В таблице есть именованные столбцы (column) и строки (row) – очень простая и понятная концепция. Пользователю предоставляется набор операторов, результатом действий которых так же являются таблицы. Эта особенность реляционной базы данных называется замкнутость. Это очень важное свойство, так как в результате любых действий порождаются объекты того же типа, что и объект, над которым совершались эти самый действия. Следствием замкнутости является возможность применять к результату все имеющиеся в наличии операторы. Иными словами, можно пользоваться вложенными выражениями [3] .

Получение новой таблицы из уже имеющихся.

Открытый исходный код

PostgreSQL распространяется под лицензией BSD. Почему не GPL? Ответ разработчиков можно перевести [4] примерно так: «PostgreSQL создавался в Беркли (Berkeley), как, собственно говоря, и лицензияBSD. Эта лицензия служила нам верой и правдой много лет. От добра – добра не ищут. Просьба не начинать опять «флеймить» по этому поводу.»

Генеалогия

Понятие реляционных баз данных было предложено в 70-ых годах прошлого века сотрудником фирмы IBM Эдгаром Ф. Коддом (Edgar F. Codd). В то время это была революция в сфере хранения данных. Головокружительный успех идей Кодда был связан еще и с тем, что он сумел воплотить математическую абстракцию под названием «реляционная алгебра» в жизнь. Многие ответы на практические вопросы были найдены теоретически с использованием математики.

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

Как и в случае с TCP/IP, практическое воплощение теории в жизнь началось с того, что DARPA (Defense Advanced Research Projects Agency) дало денег профессору. Профессор Майкл Стоунбрэйкер (Michael Stonebraker) написал реляционную базу данных POSTGRES, первый релиз которой был сделан в 1987 году. Профессор Стоунбрэйкер писал базу не с нуля. Его проект основывался на одной из самых первых реляционных баз данных Ingres, к созданию которой приложил руку сам Кодд – ее имя частично присутствует в названии проекта (POST-GRES – после Ingres).

POSTGRES использовался как для реальной работы в качестве СУБД, так и для исследования теории реляционных баз данных в стенах университетов. В 1994 году два студента – Андрэ Ю (Andrew Yu) и Джолли Чен (Jolly Chen) – добавили движок SQL, который уже к этому моменту стал бесспорным промышленным стандартом для реляционных СУБД. Так появился Postgres95, который в 1996 году сменил имя на PostgreSQL. Имя больше не менялось, но активная разработка не прекращается не на миг. Последней версией (по состоянию на лето 2006 года) была 8.1.4. Подробнее об истории можно узнать в стандартной документации, поставляемой с программой, или на сайте http://www.postgresql.org.

Семейство Ingres/PostgreSQL породило множество коммерческих реализаций [5] систем управления баз данных, благо лицензия это позволяет.

А как оно работает?

На рисунке показана схема работы типичного приложения. Процессу POSTMASTER, который существует всегда [6] , на серверную машину посылается запрос на подключение. Если запрос на подключение проходит проверку, то POSTMASTER создает свою копию. Все дальнейшие операции между базой данных и клиентом проводятся через эту копию POSTMASTER. На каждое соединение создается своя копия – это позволяет производить все действия с данными непосредственно на сервере.

Клиент Сеть Сервер Дисковая подсистема запрос на подсоединение -> POSTMASTER fork Приложение POSTMASTER БД

Схема работы приложения с PostgreSQL.

Установка и запуск

Установка базы данных – это не совсем тривиальная процедура. Лучше довериться стандартной сборке из вашего базового дистрибутива, даже если версия по умолчанию кажется устаревшей. Базовая версия PostgreSQL в Debian stable (Sarge) на момент написания статьи 7.4.7, в то время как последняя версия базы данных – 8.1.4. Различия есть, и весьма существенные, но для большинства задач вам хватит и 7.x. Самостоятельно собирать пакет из исходных текстов рекомендуется лишь в том случае, когда точно известно, что в базовой версии нет необходимой функциональности.

Если в будущем необходимо будет сменить версию PostgreSQL, то следует учитывать, что в случае крупных изменений (major releases) могут меняться внутренние форматы системных таблиц и файлов данных. В этих случаях необходимо выполнить процедуру dump/restore, которая гарантированно сохранит данные при «переезде». В отличие от крупных изменений, небольшие правки (minor releases [7] не требуют никаких действий со стороны администратора БД.

Число пакетов, в описании которых упоминается PostgeSQL, довольно велико. Например, в Debian (Sarge) таких пакетов 182, что несколько меньше, чем число пакетов связанных с именем mysql (212), но превышает число упоминаний InterBase/Firebird (22), sqlite (50) и, естественно, Oracle (19). Это ни о чем не говорит, но корреляция, скорее всего, какая-то есть. К счастью, все 182 пакета ставить не обязательно – для Debian (Sarge) достаточно двух/трех:

В случае подобной установки в обязательном порядке доставляется пакет PostgreSQL-client – базовый набор программ, которые можно ставить на клиентских машинах для удаленной связи с БД.

Если же, несмотря ни на что, хочется собрать все самостоятельно, то следует выполнить примерно следующую последовательность действий:

Разберем то, что происходит, поподробнее. После того, как с помощью wget получен и распакован архив с исходными текстами, привычные команды ./configure и make позволяют осуществить сборку PostgreSQL. Установку (make install) следует производить под суперпользователем (su). После установки необходимо добавить пользователя postgres, от имени которого и будет запущен сервер postmaster. По умолчанию установка программы производится в директорию /usr/local/pgsql/. Для хранения файлов базы предлагается создать директорию /usr/local/pgsql/data. Данные должны принадлежать пользователю postgres (команда chown). В этой же директории хранятся и файлы настройки.

Дальнейшая настройка производится под пользователем postgres (su – postgres). С помощью команды initdb производится инициализация хранилища данных, а вслед за этим производится запуск сервера postmaster. Последние две строчки создают тестовую базу данных test (createdb) и проверяют, что к ней можно подсоединиться (psql). Если все прошло нормально, то должно появиться приглашение вида:

При установке стандартными средствами дистрибутива описанные выше действия выполняются автоматически, кроме последних двух строчек. В случае Debian (Sarge) при установке PostgreSQL можно указать, где именно расположить директорию с данными. По умолчанию все помещается в /var/lib/postgres/data. Для других дистрибутивов возможны вариации. Для выяснения подробностей следует изучить README. Например, в случае Debian, особенности пакета, связанные с README. Например, в случае Debian, особенности пакета, связанные с дистрибутивом, описаны в /usr/share/doc/postgresql/README.Debian.gz Ниже, если не указано специально, все действия выполняются для дистрибутива Debian (Sarge).

Для администрирования базы данных нет необходимости становиться root. Для этого можно настроить sudo (man sudo), то есть в файл /etc/sudoers (man sudoers) следует добавить примерно следующие строки:

Файлы настройки принадлежат пользователю postgres, поэтому для их изменения необходимо иметь возможность заходить под этим пользователем:

либо добавить себя в группу postgres и разрешить этой группе редактировать конфигурационные файлы в директории /etc/postgres(chgrp + chmod g+w).

По умолчанию для создания TCP/IP соединения postmaster использует порт номер 5432. Если номер порта отличается от установленного по умолчанию, то postmaster должен быть запущен с ключом -p [номер порта].

Для выяснения этого достаточно выполнить:

Номер порта может также храниться в переменной окружения $PGPORT..

Скрипт /etc/init.d/postgresql позволяет управлять процессом postmaster

Этот же скрипт используется для автоматического запуска сервера при загрузке компьютера. От дистрибутива к дистрибутиву название инициализирующего скрипта может меняться.

После настройки сервера необходимо создать базу данных:

и завести пользователя:

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

Здесь в качестве метода идентификации используется метод >[8] . Создав пользователя в соответствии с текущей учетной записью, можно подсоединиться к PostgreSQL и начать общаться с сервером базы данных на его родном языке – SQL:

Почему?

Люди обычно работают с текстовыми файлами. Подавляющий объем структурированной информации до сих пор доставляется до нашего сознания через тест. Без помощи компьютера, в процессе ручного набора текста, информации производится не так уж и много. Необходимость базы данных в начале пути накопления личной информации не является очевидной. Все сделанное, в принципе, возможно окинуть взглядом.

Почему БД?

То, что создал один человек, другой человек, с высокой степенью вероятности, освоить в состоянии, но разобраться с наследием двух и более людей становится трудновато. А если это не наследие, а информация, идущая в реальном времени из многих (десятков, сотен, тысяч, миллионов) источников? Для начала все это надо куда-то сохранить, то есть необходимо надежное хранилище, по возможности ни от чего не зависящее.

И это еще полдела: данные надо как-то извлечь, причем не абсолютно все (иначе человеческий мозг в них утонет), а только нужные. Компьютеры пока еще не умеют надежно [9] считывать человеческие мысли, поэтому для начала необходимо нужные данные как-то пометить, и лучше это сделать в момент «укладки» в хранилище. То есть хранилище должно быть структурированным, причем структуру можно задавать извне до появления данных.

Когда данных немного – жить можно и так, оставляя ключевую информацию на обрывке листика, надеясь что он не затеряется. Обрывок листика слабо отличается от записи в каком-то файле. Текстовые утилиты типа grep существенно облегчают поиск информации, но всегда, в конце концов, настает момент, когда данных становится либо слишком много, либо они слишком часто изменяются и нужно вводить систему – Систему Управления Базой Данных или СУБД.

Почему PostgreSQL?

Когда я примерно шесть лет назад пытался понять, какую СУБД следует использовать для обеспечения эксперимента, в котором я участвую до сих пор, то выбора просто не существовало. Из свободных СУБД только PostgreSQL на тот момент обладал необходимой функциональностью. На сегодня вопрос выбора немного усложнился: подрос в хорошем смысле этого слова MySQL (в последней, 5-ой версии, говорят, наконец-то даже триггеры появились), были открыты исходные тексты проекта Firebird, в девичестве Interbase от фирмы Borland, да и «игрушечные» проекты типа SQLite тоже не лишены определенных преимуществ. Ну и, естественно, свет клином на открытых проектах не сошелся – тот же Oracle [бесплатно] предлагает свои СУБД для изучения. И все-таки я выбираю PostgreSQL – решение шестилетней давности меня не разочаровало. На редкость устойчивая к внешним воздействиям программа с абсолютно предсказуемым поведением. Даже те случаи, которые мне по неопытности показались «граблями», оказались «фичами».

Одной из основных целей, которая была поставлена при разработке PostgreSQL, является строгое соответствие стандартам. PostgreSQL поддерживает ANSI SQL–92, SQL–99 (SQL–2 и SQL–3, соответственно), а также многие из возможностей ANSI SQL:2003. Мало кому [10] удается похвастаться подобным соответствием стандартам.

В дополнение к стандартам, PostgreSQL поддерживает множество полезных расширений. Примером мелкого, но полезного расширения, не входящего в стандарт SQL, являются дополнения к условию для SELECT вида LIMIT/OFFSET [11] , которые позволяют получить только указанные строки из результата запроса. PostgreSQL полностью поддерживает механизм транзакций (transactions), вложенные запросы (subselects), триггеры (triggers), представления (views), функциональные индексы, ссылочную целостность по внешнему ключу (foreign key referential integrity), изощренные типы блокировок (sophisticated locking) и многое другое.

К названию PostgreSQL обычно прибавляется слово «объектная», то есть полное наименование звучит как «объектно-реляционная база данных PostgreSQL». Пользователю предоставляются необходимые инструменты для создания новых типов данных, функций, операторов и своих методов индексирования. Подобные возможности позволяют работать с довольно нестандартными данными, например, с картографическими объектами – PostGIS (http://postgis.refractions.net/).

Размер базы данных, управляемой PostgreSQL, не ограничен, также нет ограничения и на число строк в таблице. Да и вообще, есть ли ограничения у этого чуда? Да, есть: ваша таблица не может быть больше чем 32 Тбайта, а число столбцов в таблице не может быть больше 250–1600, в зависимости от типа данных. Много это или мало? Зависит от задачи: я, например, как-то уперся в ограничение по числу столбцов, но скорее по неопытности, нежели по необходимости. Описанное выше верно для версии PostgreSQL 8.1.4. Возможно, в будущем будут сняты и эти ограничения.

Существует родные интерфейсы для работы с PostgreSQL из языков Java (JDBC), Perl, Python, Ruby, C, C++, PHP, Lisp, Scheme и всего, что может связаться через ODBC. PostgreSQL поддерживает хранимые процедуры, которые можно написать на множестве языков программирования, включая Java, Perl, Python, Ruby, Tcl, C/C++ и родном для PostgreSQL PL/pgSQL.

По результатам автоматизированного тестирования, проведенном в 2005 году (http://www.postgresql.org/about/news.363), в коде PostgreSQL было обнаружено 20 дефектов, что соответствует 1 ошибке на 39 тысяч строк кода. Для сравнения, аналогичное тестирование примерно в то же время выявило по одному дефекту на 10 тысяч строк кода в ядре Linux, а в MySQL одно проблемное место приходится на 4 тысячи строк кода. Это ни о чем не говорит, так сказать, мелочь, зато разработчикам и пользователям PostgreSQL приятно.

Информация о.

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

С другой стороны, наличие отличной документации (в том числе и русскоязычной) позволяет достаточно безболезненно «войти в тему». Вполне можно обойтись и без специфичных для PostgreSQL возможностей, а для изучения основ SQL годится любая нормальная книга, коих довольно много. Для введения вполне сгодится «SQL» от Мартина Грабера (издательство «Лори», 2003). Собственно говоря, хватит и стандартной документации, которая идет в дистрибутиве.

DelphiSite

Наиболее читаемое

Обучающее руководство по PostgreSQL

Обучающее руководство по PostgreSQL

Обучающее руководство по PostgreSQL
Команда разработчиков PostgreSQL
Под редакцией
Thomas Lockhart
Авторское право на PostgreSQL принадлежит Postgres Global Development Group
Резюме
Postgres изначально разрабатывался в UC Berkeley Computer Science Department, цитадели многих объектно-реляционных концепций, теперь ставших доступными в некоторых коммерческих базах данных. Он обеспечивает поддержку языка SQL92/SQL3, целостность транзакций и расширяемость типов. PostgreSQL является всеобщим достоянием, потомком с открытыми исходными текстами этого оригинального кода Berkeley.
Глава 1. Введение
Оглавление
Что такое Postgres?
Краткая история Postgres
Об этой версии
Ресурсы
Терминология
Нотация
О Y2K
Авторские права и торговые марки
Этот документ является пользовательским руководством для систем управления базами данных PostgreSQL, изначально разработанной в калифорнийском университете Berkeley. PostgreSQL основан на Postgres версии 4.2. Проект Postgres ,возглавляемый профессором Michael Stonebraker, был субсидирован в рамках министерства обороны агентством по перспективным научным проектам (DARPA), Army Research Office (ARO), национальным научным фондом (NSF), и ESL, Inc.
Что такое Postgres?
Традиционные реляционные системы управления базами данных (DBMSs) поддерживают модель данных, состоящую из набора именованных отношений, содержащих атрибуты определенных типов. В настоящий момент, коммерческие системы включают такие возможные типы: числа с плавающей точкой, целые, строки символов, денежную единицу и даты. Обычно признаётся, что эта модель недостаточна для работы приложений с типами данных, которые появятся в будущем. Реляционная модель успешно замещает предыдущие модели, в частности, из-за её «спартанской простоты». Однако иногда, эта простота часто делает реализацию некоторых приложений очень сложной. Postgres предлагает значительную дополнительную мощность, объединяя следующие четыре дополнительные концепции с основными таким образом, что пользователи могут легко расширить систему:
классы
наследование
типы
функции
Прочие свойства обеспечивают дополнительную мощность и гибкость:
ограничения
триггеры
правила
целостность транзакций
Из-за этих свойств Postgres относят к категории баз данных, называемых объектно-реляционными. Обратите внимание, что они отличаются от так называемых объектно-ориентированных, которые, в общем, плохо подходят для традиционных языков реляционных баз данных. Но хотя Postgres и имеет некоторые объектно-ориентированные свойства, он остаётся в мире реляционных баз данных. Фактически, некоторые новые коммерческие базы данных включают свойства, открытые Postgres.
Краткая история Postgres
Объектно-реляционная система управления базами данных, теперь известная как PostgreSQL (и сокращённо называемая Postgres95) , происходит от пакета Postgres , написанного в Berkeley. После десятилетия разработки, PostgreSQL это наиболее прогрессивная база данных с открытыми исходными текстами, доступная везде, предлагает многовариантное управление параллелизмом, поддерживает почти все конструкции SQL (включая вложенную выборку, транзакции, и определяемые пользователем типы и функции), и имеет широкий ряд связей с языками (включая C, C++, Java, perl, tcl, и python).
Проект Berkeley Postgres
Реализация Postgres DBMS началась в 1986. Первоначальные концепции системы представлены в Задачи Postgres, а определение первоначальной модели данных показано в Модель данных Postgres. Проект правил системы для этого времени описывается в Проектирование системы правил Postgres. Логическое обоснование и архитектура администратора хранения описана в Система хранения Postgres.
Postgres за это время пережил несколько основных версий. Первая система «demoware» заработала в 1987 и была представлена в 1988 на ACM-SIGMOD конференции. Мы выпустили Версию 1, описываемую в Реализация Postgres, для нескольких внешних пользователей в июне 1989. В ответ на критику первого правила системы (Комментарий к системе правил Postgres), система правил была переконструирована (О правилах, процедурах, кэшировании и представлениях в системах баз данных) и Версия 2 увидела свет в июне 1990 с новой системой правил. Версия 3 появилась в 1991 и добавила поддержку для составного администратора хранения, улучшился исполнитель запросов, и была переписана система правил перезаписи. По большей части, после выпуска Postgres95 (смотри ниже) всё внимание было перенесено на портативность и надёжность.
Postgres использовался для реализации многих различных исследований и производства приложений. Среди них: система анализа финансовых данных, пакет контроля за производительностью реактивных двигателей, база данных передвижения астероидов и несколько географических информационных систем. Postgres также использовался как учебное пособие в нескольких университетах. Наконец, Illustra Information Technologies (потом слилась с Informix) подобрала код и коммерциализовала его. Позже, в 1992 году, Postgres стал первичным администратором данных для Sequoia 2000, научного вычислительного проекта.
Размер сообщества внешних пользователей в течении 1993 года практически удвоился. Становилось всё больше и больше понятно, что сопровождение прототипа кода и поддержка заберут большое количество времени, которое должно было быть посвящено исследованию баз данных. Из-за этого напряжения сократилась поддержка на накладные расходы, и проект официально прекратился с версией 4.2.
Postgres95
В 1994 году, Andrew Yu и Jolly Chen добавили интерпретатор языка SQL в Postgres. Впоследствии, Postgres95 был запущен в паутину, найдя свой собственный путь в мир в качестве всеобщего достояния, как потомок с открытым исходным текстом, изначально бывшим Berkeley кодом Postgres .
Код Postgres95 был полностью на ANSI C и урезан в размере на 25%. Много внешних изменений улучшили производительность и обслуживаемость. Postgres95 v1.0.x запускался на 30-50% быстрее на Wisconsin Benchmark по сравнению с Postgres v4.2. Кроме исправленных багов, появились такие улучшения: ·Язык запросов Postquel был заменён на SQL (реализован в сервере). Подзапросы не поддерживались до PostgreSQL (смотри ниже), но они могли быть съимитированы в Postgres95 с помощью функций SQL, определённых пользователем. Сложные функции были реализованы заново. Также был добавлен пункт поддержки запросов GROUP BY. Для программ на C остался доступен интерфейс <>. ·В дополнении к программе мониторинга, появилась программа (psql) , которая позволяла выполнять интерактивные запросы SQL, используя GNU readline. ·Новая клиентская библиотека, libpgtcl, стала поддерживать клиентов основанных на Tcl. Пример на shell, pgtclsh, обеспечивал новые Tcl команды для связи tcl программ с Postgres95 сервером. ·Взаимодействие с большими объектами было основательно перестроено. От перестановки больших объектов остался только механизм хранения больших объектов. (Перестановочная файловая система была удалена.) ·Объектно-уровневое системное правило было удалено. Правила еще доступны как правила перезаписи. ·Вместе с исходным кодом стало распространяться краткое обучающее руководство по официальным возможностям SQL, работающим в Postgres95. ·Для сборки стал использоваться GNU make (вместо BSD make). Также, Postgres95 может быть скомпилирован с помощью непропатченного gcc (выравнивание данных типа double было исправлено).
PostgreSQL
В 1996 году, стало ясно, что название “Postgres95” не выдержало испытания временем. Мы выбрали новое имя, PostgreSQL, отражающее взаимосвязь между первоначальным Postgres и возможностями SQL в более новых версиях. В тоже время, мы установили нумерацию версий, начиная с 6.0, вернув нумерацию обратно к прежней последовательности изначально начатой проектом Postgres.
При разработке Postgres95 акцент делался на установление и понимание существующих проблем в коде сервера. В PostgreSQL акцент был сдвинут на прибавление свойств и возможностей, хотя работа продолжалась во всех областях.
Основные улучшения в PostgreSQL включают: ·Блокировка на уровне таблиц была заменена на многовариантное управление параллелизмом, который позволяет читающему продолжать чтение согласованных данных во время деятельности пишущего и разрешает горячее резервирование из pg_dump, и то же время база данных остаётся доступной для запросов. ·Были реализованы важные свойства сервера, включая вложенную выборку, значения по умолчанию, ограничители, и триггеры. ·Были добавлены дополнительные свойства языка SQL92, включая первичные ключи, объявление идентификаторов, преобразование литерального строкового типа, приведение типа, и ввод двоичных и шестнадцатеричных целых. ·Были улучшены встроенные типы, включая новые широкомасштабные типы даты/время и поддержка дополнительных геометрических типов. ·Скорость всего кода сервера была увеличена приблизительно на 20-40%, и время запуска сервера было уменьшено на 80%, начиная с выпуска v6.0.
Терминология
В последующем тексте, термин сайтозначает хост машину, на которой установлен Postgres. Т.к. возможно установить более одной базы данных Postgres на один хост, то этот термин более точно указывает на любой отдельный набор установленных исполняемых файлов и баз данных Postgres.
Суперпользователь Postgres — это имя пользователя postgres, которому принадлежат исполняемые и файлы баз данных Postgres. Для суперпользователя, все механизмы защиты пропускаются и доступны любые произвольные данные.К тому же, суперпользователю Postgres позволено запускать некоторые программы поддержки, которые, в основном, недоступны для всех пользователей. Заметим, что суперпользователь Postgres — это не суперпользователь Unix (на который будем ссылаться как на root). Суперпользователь должен иметь не нулевой идентификатор пользователя (UID) по причинам безопасности.
Администратор базы данных или DBA — это человек, который отвечает за установку механизмов Postgres в соответствии с политикой безопасности сайта. DBA может добавлять новых пользователей по методике, описанной ниже и поддерживать набор шаблонов баз данных для использования с createdb.
postmaster — это процесс, который работает как расчётная палата для запросов к системе Postgres. Клиентские приложения подключаются к postmaster, который отслеживает любые системные ошибки и взаимодействие с процессами сервера. postmaster может принимать некоторые аргументы из командной строки для настройки своего поведения. Однако, указывать аргументы необходимо только если ты намереваешься запускаться на нескольких сайтах или не на сайте по умолчанию.
Сервер Postgres (т.е. исполняемая программа postgres) может быть запущена прямо из пользовательского shell суперпользователем Postgres (с именем базы данных в качестве аргумента). Однако, из-за этого не принимается во внимание разделяемый буферный пул и блокировка таблиц, связанных с postmaster/сайтом, поэтому это не рекомендуется на многопользовательском cайте.
Нотация
“. ” или /usr/local/pgsql/ в начале имени файла используются для представления пути к домашнему каталогу суперпользователя Postgres.
В командном синтаксисе, скобки (“[” и “]”) показывают, что выражение или ключевое слово необязательны. Всё в фигурных скобках (“<” и “>”) и содержащие вертикальные штрихи (“|”) показывают, что ты можешь выбрать из них что-то одно.
В примерах, круглые скобки (“(” и “)”) используются для группировки логических выражений. “|” — это логический оператор OR.
В примерах показано выполнение команд из различных бюджетов и программ. Команды, выполняемые из бюджета root предваряются “>”. Команды, выполняемые из бюджета суперпользователя Postgres предваряются “%”, в то время как команды выполняемые из бюджета непревелигерованных пользователей предваряются “$”. Команды SQL предваряются “=>” или не имеют приглашения, в зависимости от смысла.
Глава 2. SQL
Оглавление
Реляционная модель данных
Формальное описание реляционной модели данных
Операции в реляционной модели данных
Язык SQL
Эта глава изначально появилась как часть диссертации Stefan Simkovicss (Simkovics, 1998).
SQL стал наиболее популярным реляционным языком запросов. Название “SQL” это абривиатура Язык структурированных запросов. В 1974 году Donald Chamberlin и другие в IBM Research разработали язык SEQUEL (Язык английских структурированных запросов). Этот язык был впервые реализован в прототипе IBM названном SEQUEL-XRM в 1974-75 годах. В 1976-77 годах зародилась пересмотренная версия SEQUEL называемая SEQUEL/2 и впоследствии название было изменено на SQL.
В 1977 году был разработан новый прототип, названный System R. System R реализовывал большое подмножество SEQUEL/2 (сейчас SQL) и в течении проекта SQL было сделано много изменений. System R была установлена на многих пользовательских сайтах, как на внутренних сайтах IBM так и на некоторых выбранных клиентских сайтах. Благодаря успеху и приёму System R на этих пользовательских сайтах IBM начала разрабатывать коммерческие продукты, которые реализовывали язык SQL, основанный на технологии System R.
Через несколько лет IBM и еще несколько других продавцов анонсировали такие SQL продукты как SQL/DS(IBM), DB2 (IBM), ORACLE (Oracle Corp.), DG/SQL (Data General Corp.), и SYBASE (Sybase Inc.).

Илон Маск рекомендует:  Что такое код stretchbit
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL