Как установить Postgresql на Linux и Windows с. 16
Скачать 1.38 Mb.
|
Предисловие Эту небольшую книгу мы написали для тех, кто только начинает знакомиться с PostgreSQL. Из нее вы узнаете: • Что вообще такое, этот PostgreSQL . . . . . . . . . . . . . . . . . . .с.2 • Как установить PostgreSQL на Linux и Windows . . .с.16 • Как подключиться к серверу, начать писать SQL-запросы и применять транзакции . . . . . . . . . . . . . с.29 • Как продолжить самостоятельное изучение SQL с помощью демобазы . . . . . . . . . . . . . . . . . . . . . . . . . . . с.59 • Про возможности полнотекстового поиска . . . . . . . . с.88 • Про работу с данными в формате JSON . . . . . . . . . . . . с.96 • Как использовать PostgreSQL в качестве базы данных для вашего приложения . . . . . . . . . . . . . с.106 • Про полезную программу pgAdmin . . . . . . . . . . . . . . . с.120 • Где найти документацию и пройти обучение . . . . с.128 • Как быть в курсе происходящего . . . . . . . . . . . . . . . . . . с.139 • И немного про компанию Postgres Professional . с.143 Мы надеемся, что наша книга сделает ваш первый опыт работы с PostgreSQL приятным и поможет влиться в со- общество пользователей этой СУБД. Электронная версия книги доступна по адресу: postgrespro.ru/education/introbook Желаем удачи! 1 О PostgreSQL PostgreSQL — наиболее полнофункциональная, свобод- но распространяемая СУБД с открытым кодом. Разра- ботанная в академической среде, за долгую историю сплотившая вокруг себя широкое сообщество разработ- чиков, эта СУБД обладает всеми возможностями, необ- ходимыми большинству заказчиков. PostgreSQL активно применяется по всему миру для создания критичных бизнес-систем, работающих под большой нагрузкой. Немного истории Современный PostgreSQL ведет происхождение от про- екта POSTGRES, который разрабатывался под руковод- ством Майкла Стоунбрейкера (Michael Stonebraker), про- фессора Калифорнийского университета в Беркли. До этого Майкл Стоунбрейкер уже возглавлял разработ- ку INGRES — одной из первых реляционных СУБД, — и POSTGRES возник как результат осмысления преды- дущей работы и желания преодолеть ограниченность жесткой системы типов. Работа над проектом началась в 1985 году, и до 1988 года был опубликован ряд научных статей, описыва- 2 ющих модель данных, язык запросов POSTQUEL (в то время SQL еще не был общепризнанным стандартом) и устройство хранилища данных. POSTGRES иногда еще относят к так называемым по- стреляционным СУБД. Ограниченность реляционной мо- дели всегда была предметом критики, хотя и являлась обратной стороной ее простоты и строгости. Однако проникновение компьютерных технологий во все сферы жизни требовало новых приложений, а от баз данных — поддержки новых типов данных и таких возможностей, как наследование, создание сложных объектов и управ- ление ими. Первая версия СУБД была выпущена в 1989 году. База данных совершенствовалась на протяжении несколь- ких лет, а в 1993 году, когда вышла версия 4.2, проект был закрыт. Но, несмотря на официальное прекращение, открытый код и BSD-лицензия позволили выпускникам Беркли Эндрю Ю и Джоли Чену в 1994 году взяться за его дальнейшее развитие. Они заменили язык запросов POSTQUEL на ставший к тому времени общепринятым SQL, а проект нарекли Postgres95. К 1996 году стало ясно, что название Postgres95 не вы- держит испытание временем, и было выбрано новое имя — PostgreSQL, которое отражает связь и с ориги- нальным проектом POSTGRES, и с переходом на SQL. Именно поэтому PostgreSQL произносится «постгрес-ку- эль» или просто «постгрес», но только не «постгре». Новая версия стартовала как 6.0, продолжая исходную нумерацию. Проект вырос, и управление им взяла на 3 себя поначалу небольшая группа инициативных поль- зователей и разработчиков, которая получила название Глобальной группы разработки PostgreSQL (PostgreSQL Global Development Group). Развитие Все основные решения о планах развития и выпусках новых версий принимаются Управляющим комитетом (Core team) проекта. В настоящий момент он состоит из пяти человек. Помимо обычных разработчиков, вносящих посильную лепту в развитие системы, выделяется группа основных разработчиков (major contributors), сделавших суще- ственный вклад в развитие PostgreSQL, а также группа разработчиков, имеющих право записи в репозиторий исходного кода (committers). Состав группы разработ- чиков со временем меняется, появляются новые члены, кто-то отходит от проекта. Актуальный список разра- ботчиков поддерживается на официальном сайте Post- greSQL www.postgresql.org. Вклад российских разработчиков в PostgreSQL весьма значителен. Это, пожалуй, самый крупный глобальный проект с открытым исходным кодом с таким широким российским представительством. Большую роль в становлении и развитии PostgreSQL сыграл программист из Красноярска Вадим Михеев, 4 входивший в Управляющий комитет. Он является авто- ром таких важнейших частей системы, как многоверси- онное управление одновременным доступом (MVCC), система очистки (vacuum), журнал транзакций (WAL), вложенные запросы, триггеры. Сейчас Вадим уже не за- нимается проектом. В настоящий момент в число основных разработчиков входят трое представителей России — Олег Бартунов, Федор Сигаев и Александр Коротков, — основавших в 2015 году компанию Postgres Professional. Среди круп- ных направлений выполненных ими работ можно выде- лить локализацию PostgreSQL (поддержка национальных кодировок и Unicode), систему полнотекстового поис- ка, работу с массивами и слабо-структурированными данными (hstore, json, jsonb), новые методы индексации (GiST, SP-GiST, GIN и RUM, Bloom). Они являются автора- ми большого числа популярных расширений. Цикл работы над очередной версией PostgreSQL обычно занимает около года. За это время от всех желающих принимаются на рассмотрение патчи с исправления- ми, изменениями и новым функционалом. Для обсужде- ния патчей по традиции используется список рассылки pgsql-hackers. Если сообщество признает идею полез- ной, ее реализацию — правильной, а код проходит обя- зательную проверку другими разработчиками, то патч включается в новый релиз. В некоторый момент объявляется этап стабилизации ко- да — новый функционал откладывается до следующей версии, а продолжают приниматься только исправле- ния или улучшения уже включенных в релиз патчей. 5 Несколько раз в течение релизного цикла выпускаются бета-версии, ближе к концу цикла появляется релиз- кандидат, а вскоре выходит и новая основная версия (major version) PostgreSQL. Раньше номер основной версии состоял из двух чисел, но, начиная с 2017 года, было решено оставить только одно. Таким образом, за 9.6 последовала 10 — она и яв- ляется последней актуальной версией PostgreSQL. Сле- дующая версия, запланированная на осень 2018 года, будет иметь номер 11. В процессе работы над новой версией находятся и ис- правляются ошибки. Наиболее критические из них ис- правляются не только в текущей, но и в предыдущих версиях. По мере накопления таких исправлений при- нимается решение о выпуске дополнительных версий (minor version), совместимых со старыми. Например, версия 9.6.6 содержит только исправления ошибок, най- денных в 9.6, а 10.2 будет содержать исправления для версии 10. Поддержка Глобальная группа разработки PostgreSQL выполняет поддержку основных версий системы в течение пяти лет с момента выпуска. Эта поддержка, как и координа- ция разработки, осуществляется через списки рассылки. Корректно оформленное сообщение об ошибке имеет все шансы на скорейшее решение: нередки случаи, ко- гда исправления ошибок выпускаются в течение суток. 6 Помимо поддержки сообществом разработчиков, ряд компаний по всему миру осуществляет коммерческую поддержку PostgreSQL. В России такой компанией явля- ется Postgres Professional (www.postgrespro.ru), предо- ставляя услуги по поддержке в режиме 24x7. Современное состояние PostgreSQL является одной из самых популярных баз данных. За более чем 20-летнюю историю развития на прочном фундаменте, заложенном академической разработкой, PostgreSQL выросла в полноценную СУБД уровня предприятия и составляет реальную альтерна- тиву коммерческим базам данных. Чтобы убедиться в этом, достаточно посмотреть на важнейшие харак- теристики новейшей на сегодняшний день версии Post- greSQL 10. Надежность и устойчивость Вопросы обеспечения надежности особенно важны в приложениях уровня предприятия для работы с кри- тически важными данными. С этой целью PostgreSQL позволяет настраивать горячее резервирование, вос- становление на заданный момент времени в прошлом, различные виды репликации (синхронную, асинхрон- ную, каскадную). 7 Безопасность PostgreSQL позволяет работать по защищенному SSL- соединению и предоставляет большое количество ме- тодов аутентификации, включая аутентификацию по па- ролю, клиентским сертификатам, а также с помощью внешних сервисов (LDAP, RADIUS, PAM, Kerberos). При управлении пользователями и доступом к объектам БД предоставляются следующие возможности: • Создание и управление пользователями и групповы- ми ролями; • Разграничение доступа к объектам БД на уровне как отдельных пользователей, так и групп; • Детальное управление доступом на уровне отдель- ных столбцов и строк; • Поддержка SELinux через встроенную функциональ- ность SE-PostgreSQL (мандатное управление досту- пом). Специальная версия PostgreSQL, выпущенная компанией Postgres Professional, сертифицирована ФСТЭК для ис- пользования в системах обработки конфиденциальной информации и персональных данных. Соответствие стандартам По мере развития стандарта ANSI SQL его поддерж- ка постоянно добавлялась в PostgreSQL. Это относится 8 ко всем версиям стандарта: SQL-92, SQL:1999, SQL:2003, SQL:2008, SQL:2011. Поддержку стандартизованной в не- давней версии SQL:2016 работы с JSON планируется до- бавить в PostgreSQL 11. В целом PostgreSQL обеспечи- вает высокий уровень соответствия стандарту и поддер- живает 160 из 179 обязательных возможностей, а также большое количество необязательных. Поддержка транзакционности PostgreSQL обеспечивает полную поддержку свойств ACID и обеспечивает эффективную изоляцию транзак- ций. Для этого в PostgreSQL используется механизм многоверсионного управления одновременным досту- пом (MVCC). Он позволяет обходиться без блокировок во всех случаях, кроме одновременного изменения од- ной и той же строки данных в нескольких процессах. При этом читающие транзакции никогда не блокиру- ют пишущие транзакции, а пишущие — читающих. Это справедливо и для самого строгого уровня изоляции serializable, который, используя инновационную систему Serializable Snapshot Isolation, обеспечивает полное от- сутствие аномалий сериализации и гарантирует, что при одновременном выполнении транзакций результат бу- дет таким же, как и при последовательном выполнении. Для разработчиков приложений Разработчики приложений получают в свое распоряже- ние богатый инструментарий, позволяющий реализовать 9 приложения любого типа: • Возможность использования различных языков для серверного программирования: встроенного PL/pgSQL (удобного тесной интеграцией с SQL), C для критич- ных по производительности задач, Perl, Python, Tcl, а также JavaScript, Java и других; • Программные интерфейсы для обращения к СУБД из приложений на любом языке, включая стандартные интерфейсы ODBC и JDBC; • Набор объектов баз данных, позволяющий эффектив- но реализовать логику любой сложности на стороне сервера: таблицы и индексы, ограничения целостно- сти, представления и материализованные представ- ления, последовательности, секционирование, под- запросы и with-запросы (в том числе рекурсивные), агрегатные и оконные функции, хранимые функции, триггеры и т. д.; • Встроенная гибкая система полнотекстового поиска с поддержкой русского и всех европейских языков, дополненная эффективным индексным доступом; • Поддержка слабоструктурированных данных в духе NoSQL: хранилище пар «ключ-значение» hstore, xml, json (как в текстовом, так и в эффективном двоичном представлении jsonb); • Подключение источников данных, включая все ос- новные СУБД, в качестве внешних таблиц по стан- дарту SQL/MED с возможностью их полноценного ис- пользования, в том числе для записи и распределен- ного выполнения запросов (Foreign Data Wrappers). 10 Масштабируемость и производительность PostgreSQL эффективно использует современную архи- тектуру многоядерных процессоров — его производи- тельность растет практически линейно с увеличением количества ядер. Начиная с версии 9.6 PostgreSQL умеет работать с дан- ными в параллельном режиме, что на сегодняшний день включает параллельное чтение (включая индексное сканирование), соединение и агрегации. Это еще боль- ше повышает возможности использования аппаратных средств для ускорения операций. Планировщик запросов В PostgreSQL используется планировщик запросов, осно- ванный на стоимости. Используя собираемую статистику и учитывая в своих математических моделях как дис- ковые операции, так и время работы процессора, пла- нировщик позволяет оптимизировать самые сложные запросы. В его распоряжении находятся все методы доступа к данным и способы выполнения соединений, характерные для передовых коммерческих СУБД. Возможности индексирования В PostgreSQL реализованы различные методы индек- сирования. Помимо традиционных B-деревьев, также доступны: 11 • GiST — обобщенное сбалансированное дерево поис- ка, которое может применяться для данных, не до- пускающих упорядочения. Примерами могут служить R-деревья для индексирования точек на плоскости с возможностью поиска ближайших соседей (k-NN search) и индексирование операции пересечения ин- тервалов; • SP-GiST — обобщенное несбалансированное дерево поиска, основанное на разбиении области значений на непересекающиеся вложенные области. Примера- ми могут служить дерево квадрантов и префиксное дерево; • GIN — обобщенный инвертированный индекс. Основ- ной областью применения является полнотекстовый поиск, где требуется находить документы, в которых встречается указанные в поисковом запросе слова. Другим примером использования является поиск значений в массивах данных; • RUM — дальнейшее развитие метода GIN для пол- нотекстового поиска. Этот индекс, доступный в виде расширения, позволяет ускорить фразовый поиск и сразу выдавать результаты упорядоченными по реле- вантности; • BRIN — индекс небольшого размера, позволяющий найти компромисс между размером индекса и скоро- стью поиска. Эффективен на больших кластеризован- ных таблицах; • Bloom — индекс, основанный на фильтре Блума (по- явился в версии 9.6). Такой индекс, имея очень ком- 12 пактное представление, позволяет быстро отсечь за- ведомо ненужные строки, однако требует перепро- верки оставшихся. За счет расширяемости набор доступных методов ин- дексного доступа постоянно увеличивается. Многие типы индексов могут создаваться как по одно- му, так и по нескольким столбцам таблицы. Независимо от типа, можно строить индексы не только по столбцам, но и по произвольным выражениям, а также создавать частичные индексы только для определенных строк. По- крывающие индексы позволяют ускорить запросы за счет того, что все необходимые данные извлекаются из самого индекса без обращения к таблице. Несколько индексов могут автоматически объединяться с помощью битовой карты для ускорения доступа. Кроссплатформенность PostgreSQL работает на операционных системах се- мейства Unix, включая серверные и клиентские раз- новидности Linux, FreeBSD, Solaris, macOS, а также на Windows. За счет открытого и переносимого кода на языке C Post- greSQL можно собрать на самых разных платформах, даже если для них отсутствует поддерживаемая сооб- ществом сборка. 13 Расширяемость Расширяемость — одно из фундаментальных преиму- ществ системы, лежащее в основе архитектуры Post- greSQL. Пользователи могут самостоятельно, не меняя базовый код системы, добавлять: • Типы данных; • Функции и операторы для работы с новыми типами; • Индексные методы доступа; • Языки серверного программирования; • Подключения к внешним источникам данных (Foreign Data Wrappers); • Загружаемые расширения. Полноценная поддержка расширений позволяет реа- лизовать функционал любой сложности, не внося изме- нений в ядро PostgreSQL и допуская подключение по мере необходимости. Например, именно в виде расши- рений построены такие сложные системы, как: • CitusDB — возможность распределения данных по разным экземплярам PostgreSQL (шардинг) и массив- но-параллельного выполнения запросов; • PostGIS — система обработки геоинформационных данных. Только стандартный комплект, входящий в сборку Post- greSQL 10, содержит около полусотни расширений, до- казавших свою надежность и полезность. 14 Доступность Лицензия PostgreSQL разрешает неограниченное ис- пользование СУБД, модификацию кода, а также вклю- чение в состав других продуктов, в том числе закрытых и коммерческих. Независимость PostgreSQL не принадлежит ни одной компании и раз- вивается международным сообществом, в том числе и российскими разработчиками. Это означает, что систе- мы, использующие PostgreSQL, не зависят от конкрет- ного вендора, тем самым в любой ситуации сохраняя вложенные в них инвестиции. 15 Установка и начало работы Что нужно для начала работы с PostgreSQL? В этой гла- ве мы объясним, как установить службу PostgreSQL и управлять ей, а потом создадим простую базу данных и покажем, как создать в ней таблицы. Мы расскажем и про основы языка SQL, на котором формулируются за- просы. Будет неплохо, если вы сразу начнете пробовать команды по мере чтения. Мы будем использовать дистрибутив Postgres Pro Stan- dard 10, разработанный в нашей компании Postgres Professional. Этот дистрибутив полностью совместим с обычной СУБД PostgreSQL и дополнительно включа- ет в себя некоторые разработки, выполненные в нашей компании, а также ряд возможностей, которые будут до- ступны только в следующей версии PostgreSQL. Итак, приступим. Установка и запуск сервера PostgreSQL зависит от того, какую операционную систему вы ис- пользуете. Если у вас Windows, читайте дальше; если Linux семейства Debian или Ubuntu — переходите сразу к с. 24. 16 Инструкцию по установке для других операционных си- стем вы найдете на сайте нашей компании: postgrespro.ru/products/download. Если нужной вам версии там не оказалось — восполь- зуйтесь обычным дистрибутивом PostgreSQL: инструкции находятся по адресу www.postgresql.org/download. |