Что нового в PostgreSQL 12?
Вышел релиз нашей любимой системы управления базами данных PostgreSQL.
Хоть мегапрорывных фич в этот раз нет, но количество различных приятных улучшений и оптимизаций вполне оправдывает скорейшее обновление.
Что есть важного в заметках к релизу (
http://amp.gs/ArcS):
• генерируемые колонки — позволяют на ходу вычислять и кэшировать значения на основе других колонок (теперь можно обойтись без триггеров). Пока что поддерживается только тот их вид, который записывает данные на диск, чисто виртуальные колонки пока делать не стали.
• CTE inlining — теперь по умолчанию common table expressions являются полноправными участниками процесса планирования выполнения запроса и планировщик может строить более быстрые планы, а мы — смело использовать их как инструмент рефакторинга запросов. Но в каких-то случаях может стать хуже, т.к. раньше CTE любили использовать в качестве «забора», не давашего планировщику чересчур усердничать. На этот случай подготовили флаги, позволяющие вернуть старое поведение, если нужно. Читайте подробнее об истории использования CTE в качестве optimization fence здесь:
http://amp.gs/ArcN • мультиколоночная статистика — в сложных запросах, использующих сильно коррелирующие друг с другом колонки (такие как страна и язык, например), планировщик обычно очень сильно ошибается в своих оценках, но теперь можно ему подсказать о таких взаимосвязях в данных и ускорить сложные запросы.
• прогресс создания индексов — создание индекса на большой таблице в нагруженной базе может занимать часы и раньше этот процесс сопровождался страхом и неопределённостью — идёт ли процесс, не заблокировался ли кем, сколько же ещё ждать, стоит ли идти спать до утра? Теперь можно наблюдать за прогрессом в специальной вьюшке.
• ускорение работы и уменьшение размера многоколоночных B-Tree индексов, особенно с большим количеством одинаковых значений или добавленными колонками. Правда, это работает только для свежесозданных индексов, а для остальных после обновления придётся сделать
REINDEX CONCURRENTLY (кстати, его тоже добавили, тоже с прогрессом)
• поддержка стандартизованного языка SQL/JSON path для доступа к данным в «развесистых» json'ах.
• ускорение запросов к сильно партиционированным таблицам — теперь можно смело работать с тысячами партиций.
…и много чего ещё.
Мы уже планируем обновление своих баз, а вы?