Представлена (http://www.postgresql.org/about/news/1595/) альфа-версия СУБД PostgreSQL 9.5. Релиз ожидается осенью.
Среди добавленных улучшений (https://wiki.postgresql.org/wiki/What%27s_new_in_Postgr...) (первод (http://postgresmen.ru/node/2524) подробного обзора основных новшеств):
- Функциональность "UPSERT" (добавить-или-модифицировать), реализованная через новое выражение "INSERT ON CONFLICT NOTHING/UPDATE", позволяющая обработать ситуацию невозможности добавления данных через "INSERT", например, из-за нарушения условий уникальности или недопустимости значения одного из полей. Вместо вывода ошибки теперь можно игнорировать выполнение оператора или изменить связанные с ключевым полем данные (т.е. если запись уже существует, вместо INSERT выполнить UPDATE);
- BRIN-индексы ("индексы блоковых зон", Block Range Index), позволяющие сверхкомпактно индексировать очень большие таблицы, без применения традиционных B-деревьев. Суть BRIN-индексов сводится к разбиению общего индекса на блоки, каждый из которых содержит данные индекса только для определённого диапазона значений. В тесте (http://www.depesz.com/2014/11/22/waiting-for-9-5-brin-block-.../) подобный метод оказался примерно в два раза медленнее b-деревьев при осуществлении операций выборки данных, но в 3-4 раза быстрее при создании и обновлении индекса, а также занял значительно меньше места на диске (64 Кб против 28 Мб);
- Ограничение доступа на уровне строк (Row-Level Security, RLS). Доступ пользователей к данным в таблице теперь можно разграничивать на уровне отдельных строк, например, можно запретить определённой категории пользователей просмотр строк, в которых хранятся конфидерциальные данные. Для активации RLS следует использовать (http://www.depesz.com/2014/10/02/waiting-for-9-5-row-level-s.../) директиву "ALTER TABLE tablename ENABLE ROW LEVEL SECURITY", после чего следует задать правила доступа при помощи выражения "CREATE POLICY";
- Новые функции и операторы для типа данных JSONB. Для изменения значений в документе JSONB теперь можно обойтись (http://michael.otacoo.com/postgresql-2/postgres-9-5-feature-.../) без извлечения и переопределения всего документа, благодаря появлению функции jsonb_set(). Также добавлены функции json_strip_nulls (чиста NULL-значений и jsonb_pretty (отформатированный вывод). Добавлен оператор "||" для соединения двух значений JSONB;
- Инструмент pg_rewind (https://github.com/vmware/pg_rewind), позволяющий существенно упростить (http://hlinnaka.iki.fi/presentations/NordicPGDay2015-pg_rewi...) процесс восстановления отказоустойчивых конфигураций после переключения на резервный сервер. После возвращения в строй основного сервера возникает задача синхронизации его состояния с продолжившим работу запасным сервером, который успел накопить свою порцию изменений. Утилита pg_rewind пытается восстановить состояние первичного сервера по WAL-логу транзакций, перебирая их начиная с момента незадолго до сбоя, определяя изменённые данные и перенося только изменившиеся блоки, что позволяет обойтись без восстановления полной копии с работающего резервного сервера.
- Существенные оптимизации скорости сортировки и хэширования в памяти. Благодаря применению нового метода сортировки строковых значений и чисел, удалось увеличить скорость индексации в три раза;
- Автоматизированное управление размером лога транзакций;
- Аналитические возможности (https://wiki.postgresql.org/wiki/What%27s_new_in_Postgr...) "GROUPING SETS", "CUBE" и "ROLLUP", позволяющие формировать вывод с группировкой по набору полей и рассчитывать число комбинаций различных категорий;
- Улучшения репликации и средств повышения отказоустойчивости;
- Множественные улучшения в механизме Foreign Data Wrappers, включая выражение "IMPORT FOREIGN SCHEMA (https://wiki.postgresql.org/wiki/What%27s_new_in_Postgr...)", которое позволяет автоматизировать импорт всех связанных внешних таблиц для уже существующих таблиц с выбранной меткой сервера.
- Существенные улучшения масштабирования на системах с большим количеством процессорных ядер и оперативной памяти.
URL: http://www.postgresql.org/about/news/1595/
Новость: http://www.opennet.dev/opennews/art.shtml?num=42555