После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 12. Обновления для новой ветки будут выходить в течение пяти лет до ноября 2024 года.

Основные новшества:

  • Добавлена поддержка «генерируемых столбцов», значение которых вычисляется на основе выражения, охватывающего значения других столбцов в той же таблице (аналог представлений, но для отдельных столбцов). Генерируемые столбцы могут быть двух типов — хранимые и виртуальные. В первом случае значение вычисляется в момент добавления или изменения данных, а во втором — при каждом чтении на основе текущего состояния других столбцов. В настоящее время в PostgreSQL поддерживаются только хранимые генерируемые столбцы;
  • Добавлена возможность выполнения запросов данных из JSON-документов при помощи Path-выражений, напоминающих XPath и определённых в стандарте SQL/JSON. Для повышения эффективности обработки подобных выражений для документов, хранимых в формате JSONB, применяются существующие механизмы индексирования;
  • Включено по умолчанию применение JIT-компилятора (Just-in-Time) на основе наработок LLVM для ускорения выполнения некоторых выражений в процессе обработки SQL-запроса. Например, JIT применим для ускорения выполнения выражений внутри блоков «WHERE», в выходных списках (target lists), агрегатных выражениях и некоторых внутренних операциях;
  • Существенно увеличена производительность индексирования. Индексы B-tree оптимизированы для работы в условиях частого изменения индексов — в тестах TPC-C наблюдается общее повышение производительности и снижение потребления дискового пространства в среднем на 40%. Снижены накладные расходы при генерации лога упреждающей записи (WAL) для типов индексов GiST, GIN и SP-GiST. Для GiST добавлена возможность создания индексов-обёрток (через выражение INCLUDE), включающих дополнительные столбцы. В операции CREATE STATISTICS обеспечена поддержка статистики о наиболее типичных значениях (MCV), позволяющей генерировать более оптимальные планы запросов при использовании неравномерно распределенных столбцов;
  • Реализация секционирования (партицирования) оптимизирована для запросов, охватывающих таблицы с тысячами секций, но ограничивающихся выборкой ограниченного подмножества данных. Увеличена производительность добавления данных в секционированные таблицы при помощи операций INSERT и COPY, а также обеспечена возможность добавления новых секций через «ALTER TABLE ATTACH PARTITION» без блокировки выполнения запросов;
  • Добавлена поддержка автоматического inline-развёртывания обобщённых табличных выражений (Common Table Expression, CTE), позволяющих использовать временные именованные результирующие наборы, задаваемые при помощи оператора WITH. Inline-развёртывание позволяет повысить производительность большинства запросов, но пока применяется только для нерекурсивных CTE;
  • Добавлена поддержка недетерминированных свойств локали «Collation», позволяющего задавать правила сортировки и методы сопоставления с учётом смысла символов (например, при сортировке цифровых значений учитывается наличие минуса и точки перед числом и разные виды написания, а при сравнении не принимается во внимание регистр символов и наличие знака ударения);
  • Добавлена поддержка многофакторной аутентификации клиента, при которой в pg_hba.conf для аутентификации можно комбинировать аутентификацию по SSL-сертификату (clientcert=verify-full) c дополнительным методом аутентификации, таким как scram-sha-256;
  • Добавлена поддержка шифрования канала связи при аутентификации через GSSAPI, как на стороне клиента, так и на стороне сервера;
  • Добавлена поддержка определения LDAP-серверов на основе записей «DNS SRV», если PostgreSQL собран с OpenLDAP;
  • Добавлена операция «REINDEX CONCURRENTLY» для перестроения индексов без блокировки операций записи в индекс;
  • Добавлена команда pg_checksums, позволяющая для существующей БД включать и выключать проверку контрольных сумм страниц данных (ранее данная операция поддерживалась только во время инициализации БД);
  • Обеспечен вывод индикатора прогресса выполнения операций CREATE INDEX, REINDEX, CLUSTER, VACUUM FULL и pg_checksums;
  • Добавлена команда «CREATE ACCESS METHOD» для подключения обработчиков новых методов хранения таблиц, оптимизированных для различных специфичных задач. В настоящее время единственным встроенным методом доступа к таблицам является «heap»;
  • Файл конфигурации recovery.conf объединён с postgresql.conf. В качестве индикаторов перехода в состояние восстановления после сбоя теперь следует использовать файлы recovery.signal и standby.signal.