После года разработки вышла
версия 9.0 СУБД PostgreSQL в которой представлено более 200 улучшений.
PostgreSQL 9.0 является первым релизом со встроенной системой бинарной
репликации в режиме реального времени, позволяющей организовать горячее
резервное копирование и потоковую репликацию. Ключевые улучшения:
- Реализация режима "горячего резерва" (Hot Standby), при
котором появилась возможность выполнения select запросов на запасном
сервере, т.е. теперь можно штатными средствами организовать
master-slave репликацию с практически нулевой дополнительной нагрузкой
на сервер (с master сервера просто копируются WAL-логи (write-ahead
logging), без каких-либо блокировок и дополнительного вызова
триггеров). Ранее синхронизированный сервер не мог выполнять запросы, и
находился в неактивном режиме, при котором он мог только перехватить
управление в случае сбоя основного сервера;
- Поддержка режима потоковой репликации (Streaming Replication), суть которой в организации непрерывной передачи бинарных WAL-логов нескольким запасным серверам PostgreSQL;
- Поддержка 64-разрядной версии для платформы Windows;
- Замена pg_listener на новый работающий в памяти
механизм Listen/Notify, ориентированный на высокопроизводительный обмен
сообщениями и обслуживание очередей. Listen/Notify реализован в виде
очереди событий в оперативной памяти, вместо таблицы;
- Для автоматизации обновления базы при переходе на более новую ветку PostgreSQL (с 8.3 или 8.4 до 9.0) добавлена утилита pg_upgrade;
- Через оператор "DO"
теперь можно выполнять код в SQL-выражении на процедурном языке без
создания отдельной функции. Директива "DO" теперь поддерживает ad-hoc и
"anonymous" блоки;
- Возможность назначать триггеры для отдельных столбцов и выполнять триггеры по условиям;
- По умолчанию теперь активируется встроенный язык
PL/pgSQL. Переработан парсер PL/pgSQL. Разнообразные улучшения также
добавлены в реализации PL/Perl и PL/Python, например, добавлена
поддержка Python 3;
- Добавлены "исключающие ограничения",
представляющие собой обобщенный аналог UNIQUE и реализующие новые
способы гарантии логической целостности данных в базе. Возможность
задания флага DEFERRABLE для выражений с признаком UNIQUE (отложенная UNIQUE-проверки);
- Улучшена поддержка хранения в одном поле произвольного набора данных в формате ключ/значение;
- В оптимизаторе появились средства для автоматического удаления лишних JOIN-ов и оптимизации для ORM-запросов (object relational mapper).
- Автоматический возврат числа строк, фигурирующих в
выполненном SELECT-запросе. В psql данное значение не отображается, но
может быть получено с использованием программного интерфейса, подобного
libpq.
- Поддержка функций ROWS PRECEDING и ROWS FOLLOWING
в WINDOW-блоке SELECT-запроса, позволяющих сформировать кадр из
заданного числа строк, относительно текущей позиции.
- Использование блока ORDER BY внутри агрегатных
функций (например: array_agg(a ORDER BY b)), теперь не нужно прибегать
к ухищрениям для получения упорядоченного набора записей на входе
агрегатных функций;
- Добавлена возможность контроля доступа к большим объектам (large objects);
- В функции регулярных выражений добавлена поддержка
независимых от регистра проверок и классификации символов, привязанной
к текущей локализации, при использовании кодировки UTF8 на сервере;
- Для упрощения разграничения доступа для множества объектов реализованы конструкции "GRANT ALL ON" и "ALTER DEFAULT PRIVILEGES". Добавлена поддержка установки прав для BLOB-ов (больших бинарных объектов);
- Возможность использования именованных параметров в функциях;
- Поддержка отложенных проверок уникальных ключей;
- Поддержка конструкции IF EXISTS в DROP COLUMN/CONSTRAINT;
- Возможность вывода результатов работы EXPLAIN в YAML, XML и JSON форматах;
- Новый шестнадцатиричный формат ввода и вывода для типа данных BYTEA;
- Новые возможности безопасности - аутентификация через RADIUS, улучшения в LDAP, модуль проверки стойкости паролей "passwordcheck";
- Улучшения в "hstore", включая новые функции и поддержка данных большого размера;
- Новая реализация VACUUM FULL,
полностью перезаписывающая таблицы и индексы, что быстрее и эффективнее
в большинстве случаев, чем перемещение отдельных строк для повышения
компактности хранилища;
- Поддержка многопоточности в утилите pgbench, что
позволяет задействовать все CPU в системе и сгенерировать более
реалистичную тестовую нагрузку.
Дополнение: Доступен
перевод на русский язык официального пресс-релиза о выходе PostgreSQL
9.0. Практические примеры по использованию новых конструкций PostgreSQL
9.0 можно посмотреть в wiki-документе "What's new in PostgreSQL 9.0"
Источник
|