- •Размер базы данных
- •Поддерживаемые встроенные типы данных
- •Типы данных, создаваемые пользователем
- •Локализация
- •Языки, которые могут использоваться для написания хранимых процедур (функций)
- •Функции и операторы
- •Индексы
- •Полнотекстовый поиск
- •Многоверсионный контроль конкурентых транзакций и изоляция транзакций
- •Журналы (логи) опережающей записи (wal)
- •Репликация и технология Hot Standby
- •Табличные пространства (tablespaces)
- •Гибкая настройка сервера
- •Ограничения целостности
- •Хранимые процедуры
- •Триггеры
- •Система правил
- •Роли и привелегии
- •Сбор статистики
- •Резервное копирование и восстановление
Типы данных, создаваемые пользователем
С помощью команды CREATE TYPE пользователи могут создавать новые типы данных для своих нужд.
Локализация
PostgreSQL работает с локализацией, установленной в операционной системе и отвечающей стандарту POSIX. На практике это означает возможность работы с несколькими десятками языков, в том числе и с русским языком во всех возможных кодировках: koi8-r, cp1251, iso8859-5 и UTF-8. Возможность корректной работы PostgreSQL с конкретной кодировкой зависит от корректной поддержки этой кодировки средствами самой операционной системы.
Благодаря использованию библиотеки gettext, сообщения об ошибках и в утилитах переведены на многие языки, в том числе и на русский.
Языки, которые могут использоваться для написания хранимых процедур (функций)
Java
Perl
Python
Ruby
Tcl
C/C++
PL/pgSQL
Функции и операторы
Для каждого из перечисленных выше типов существует свой набор функций и операторов, который делает работу с данными этого типа максимально удобной, гибкой и производительной. Перечисление этих функций и операторов занимает довольно солидный объём документации, поставляемой с PostgreSQL, поэтому подробности смотрите там.
Индексы
PostgreSQL предлагает 4-ре типа индексов: B-tree, Hash, GiST и GIN. Каждый тип индекса имеет свой алгоритм реализации, что позволяет существенно увеличить быстродействие, если для определённого вида данных выборать определённый типа индекса.
PostgreSQL позволяет создавать индексы с использованием выражений, например: CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
PostgreSQL позволяет создавать частичные (partial) индексы, используя выражение WHERE, например: CREATE INDEX orders_unbilled_index ON orders (order_nr) WHERE billed IS NOT true;.
Полнотекстовый поиск
Начиная с версии 8.3 в ядро PostgreSQL включен функционал полнотекстового поиска (который раньше поставлялся в виде отдельного модуля-расширения).
Полнотекстовый поиск позволяет создавать запросы к текстовым документами, такие как: "найти все документы, содержащие определённые слова и выдать их в определённом порядке ", где и сами запросы и порядок выдачи могут гибко настраиваться в зависимости от конкретных потребностей.
Многоверсионный контроль конкурентых транзакций и изоляция транзакций
В PostgreSQL реализован (Multiversion Concurrency Control, MVCC) - многоверсионный контроль конкурентных транзакций, который управляет конкурентным доступом к данным на многоверсионной основе. На практике это означает, что при запросе к БД каждая транзакция видит как бы снимок данных (версию) на момент этого снимка, а не текущее состояние данных. Таким образом транзакции защищаются от просмотра нецелостных данных, которые могут ещё только формироваться другими конкурентными транзакциями в тех же самых строках таблицы. Этим же достигается изоляция транзакций для каждой сессии к БД. MMVC позволяет избегать методов явной блокировки, которые применяются в традиционных СУБД и таким образом, минимизирует блокировки данных и позволяет увеличить производительность в многопользовательской работе. Основное преимущество MMVC состоит в том, что чтение данных никогда не блокирует запись, а запись никогда не блокирует чтение.
Также в PostgreSQL реализованы традиционные схемы явных блокировок данных, применяющихся для изоляции транзаций, такие как:
блокировка на уровне таблицы
блокировка на уровне записи в таблице (строки)
advisory блокировки (для собственных блокировок на уровне приложений)
Также реализовано отслеживание deadlocks (взаимных блокировок)
