PostgreSQL — объектно‑реляционная система управления базами данных

PostgreSQL — это популярная свободная объектно‑реляционная система управления базами данных. PostgreSQL базируется на языке SQL и поддерживает многочисленные возможности.

Преимущества PostgreSQL:

  • поддержка БД неограниченного размера;
  • мощные и надёжные механизмы транзакций и репликации;
  • расширяемая система встроенных языков программирования и поддержка загрузки C‑совместимых модулей;
  • наследование;
  • легкая расширяемость.

Текущие ограничения PostgreSQL:

  • Нет ограничений на максимальный размер базы данных
  • Нет ограничений на количество записей в таблице
  • Нет ограничений на количество индексов в таблице
  • Максимальный размер таблицы — 32 Тбайт
  • Максимальный размер записи — 1,6 Тбайт
  • Максимальный размер поля — 1 Гбайт
  • Максимум полей в записи — 250—1600 (в зависимости от типов полей)

Особенности PostgreSQL:

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

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

Механизм правил в PostgreSQL представляет собой механизм создания пользовательских обработчиков не только DML‑операций, но и операции выборки. Основное отличие от механизма триггеров заключается в том, что правила срабатывают на этапе разбора запроса, до выбора оптимального плана выполнения и самого процесса выполнения. Правила позволяют переопределять поведение системы при выполнении SQL‑операции к таблице.

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

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

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

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

Использование в веб‑проектах

В разработке простых сайтов PostgreSQL используется значительно реже, чем MySQL / MariaDB, эта пара с заметным отрывом опережает по частоте использования остальные системы управления базами данных за счёт того, что большинство коробочных CMS созданы именно на основе этих двух СУБД. При этом в разработке сложных сайтов и веб‑приложений PostgreSQL используется чаще, нежели MySQL и MariaDB. Большинство фреймворков (например, Ruby on Rails, Yii, Symfony, Django) поддерживают использование PostgreSQL в разработке.

СУБДхранение данныхбэкендSQLвеб-разработкасерверное ПО
Статья опубликована в 2019 и была обновлена в 2020 году

Тематические статьи

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

MySQL — это реляционная система управления базами данных с открытым исходным кодом. В настоящее время эта СУБД одна из наиболее популярных в веб‑приложениях — подавляющее большинство CMS использует именно MySQL (часто только её, без альтернатив), а почти все веб‑фреймворки поддерживают MySQL уже на уровне базовой конфигурации (без дополнительных модулей).

СУБД
хранение данных
бэкенд
SQL
веб-разработка
серверное ПО
Статья опубликована в 2014 году

SQL-инъекции — распространённый метод взлома веб‑приложений и сайтов

SQL‑инъекции — это один из распространённых способов взлома сайтов и веб‑приложений, работающих с реляционными базами данных.

SQL‑инъекции основаны на внедрении в выполняемый приложением запрос к базе данных произвольного SQL‑кода, переданного злоумышленником. Последствиями SQL‑инъекций может быть как кража, модификация или удаление данных, так и полный взлом атакуемой системы — получение привилегированного доступа, например.

информационная безопасность
SQL
бэкенд
веб-разработка
СУБД
хранение данных
серверное ПО
Статья опубликована в 2019 году

MariaDB — система управления реляционными базами данных

MariaDB — ответвление реляционной СУБД MySQL, разрабатываемое сообществом под лицензией GPL. MariaDB полностью совместима с приложениями, использующими MySQL, а переход на эту СУБД оправдан тем, что MySQL уже не так активно развивается.

СУБД
хранение данных
бэкенд
SQL
веб-разработка
серверное ПО
Статья опубликована в 2014 году

Ускоряем работу сайта при помощи кеширования на базе Memcached

Memcached — это хранилище «ключ => значение», использование которого очень эффективно для ускорения работы сайта или веб‑приложения.

СУБД
быстродействие
хранение данных
NoSQL
бэкенд
веб-разработка
серверное ПО
Статья опубликована в 2014 году

Ускоряем работу сайта: используем Redis для кеширования и хранения данных

Redis — сетевое журналируемое хранилище данных типа «ключ — значение», которое обрабатывает данные в оперативной памяти и обладает механизмами снимков и журналирования для обеспечения постоянного хранения. Хранилище поддерживает работу с пятью типами данных: со строками, списками, хешами, обычными и сортируемыми множествами.

быстродействие
бэкенд
веб-разработка
хранение данных
СУБД
серверное ПО
Статья опубликована в 2014 году

Реляционные базы данных и NoSQL‑хранилища

Базы данных служат для хранения и обработки данных. Бывают реляционные (SQL) и нереляционные (NoSQL) системы управления базами данных.

Реляционные системы управления базами данных (SQL) хранят данные в табличных структурах и чаще всего используются в качестве основного хранилища для веб‑приложений. Они очень стабильны и их надёжность проверена временем. Нереляционные СУБД (NoSQL) заметно моложе реляционных баз данных, а также заметно от них отличаются по структуре хранения данных и работе с ними. Большинство нереляционных хранилищ превосходят классические SQL СУБД по скорости доступа или при работе со специфическими типами данных, но обычно эта скорость достигается за счёт снижения надёжности хранения. На практике NoSQL‑решения обычно применяются не для хранения всех данных приложения, а для решения специфических задач — для кэширования, хранения логов, управления очередями, для распределённого хранения данных, ускорения поиска и фильтрации.

хранение данных
SQL
NoSQL
СУБД
серверное ПО
Статья опубликована в 2019 году

Масштабирование баз данных — партиционирование, репликация и шардинг

СУБД — это очень часто «узкое место» в производительности веб‑приложений. В момент, когда сервер баз данных не может справится с нагрузками, производится масштабирование.

В этой статье мы рассмотрим наиболее часто используемые способы увеличения производительности СУБД — партиционирование, репликацию и шардинг.

быстродействие
отказоустойчивость
хранение данных
СУБД
SQL
NoSQL
серверное ПО
Статья опубликована в 2014 и обновлена в 2020 году

MongoDB — документо-ориентированная база данных (NoSQL)

MongoDB — это NoSQL хранилище данных, крайне удобное для хранения информации, которая не может быть нормально структурирована в рамках реляционных баз данных.

MongoDB — это СУБД с открытым исходным кодом, не требующая описания схемы таблиц. Документы в MongoDB хранятся в JSON или BSON, работа с такой моделью проще кодируется и проще управляется, а внутренняя группировка релевантных данных обеспечивает дополнительный выигрыш в быстродействии.

СУБД
NoSQL
хранение данных
серверное ПО
Статья опубликована в 2019 году

Серверное программное обеспечение

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

системное администрирование
веб-серверы
СУБД
серверное ПО
хранение данных
Статья опубликована в 2014 году