4 июня PostgreSQL Global Development Group выпустила PostgreSQL 19 Beta 1. Финальный релиз ожидается в сентябре-октябре, а пока это возможность увидеть, куда движется база — и список изменений в этот раз тянет на самый интересный за несколько лет.
По производительности главное — работа с эксплуатацией больших таблиц. Появилась команда REPACK с опцией CONCURRENTLY: перестройка таблицы без блокирующей эксклюзивной блокировки, то есть штатная замена внешнему pg_repack. Автовакуум научился работать параллельными воркерами (настройка autovacuum_max_parallel_workers), а асинхронный ввод-вывод теперь сам масштабирует пул воркеров при io_method=worker — за это отвечают новые io_min_workers и io_max_workers. Отдельно заявлено двукратное ускорение вставок в таблицы с внешними ключами, а планировщик получил оптимизации анти-джойнов, инкрементальные сортировки и eager aggregation. Для тех, кому планировщик надоел своей самодеятельностью, появились расширения pg_plan_advice и pg_stash_advice — управление планами и их стабилизация.
Разработчикам — заметная порция синтаксиса: GROUP BY ALL, INSERT ... ON CONFLICT DO SELECT ... RETURNING, ALTER TABLE ... MERGE PARTITIONS и SPLIT PARTITIONS, темпоральные UPDATE/DELETE с FOR PORTION OF, строковые функции в jsonpath (lower(), replace(), split_part() и компания) и команда WAIT FOR LSN для честного read-your-writes на репликах. Плюс поддержка SQL/PGQ — графовых запросов по стандарту SQL. Логическая репликация научилась реплицировать последовательности (это прямо упрощает онлайн-апгрейды), а также поддерживает CREATE PUBLICATION ... EXCEPT и включение без рестарта сервера. По безопасности: SNI через новый файл pg_hosts.conf — несколько TLS-сертификатов на одном инстансе, — предупреждения об истечении пароля и ворнинги после успешной md5-аутентификации.
Теперь неприятное. JIT-компиляция по умолчанию выключена. Аутентификация RADIUS удалена совсем. Компрессия по умолчанию сменилась с pglz на lz4. А vacuumdb --analyze-only теперь по умолчанию анализирует и партиционированные таблицы.
Что делать практикующему разработчику. В прод бету, разумеется, не ставим — но именно сейчас её надо погонять на копии своей нагрузки, потому что после GA спорить будет поздно. Конкретно: если у вас аналитические запросы с тяжёлыми выражениями, померьте их с выключенным JIT — вы можете внезапно обнаружить регрессию и захотеть вернуть jit = on точечно. Если хоть где-то в pg_hba.conf есть RADIUS — это блокер апгрейда, планируйте миграцию заранее. Если md5 ещё жив (а он жив чаще, чем кажется), переводите роли на scram-sha-256 сейчас: в 19-й вас будут об этом предупреждать, в следующей — почти наверняка отключат. И самое приятное для тех, кто годами держал в проде pg_repack как внешнюю зависимость: протестируйте REPACK ... CONCURRENTLY на большой раздутой таблице и сравните время и объём WAL — если сойдётся, из стека уезжает целое расширение. Заодно попробуйте EXPLAIN (ANALYZE, IO), чтобы увидеть, что там реально делает асинхронный ввод-вывод.
Комментарии