Релизы PostgreSQL
Между этим обзором и предыдущим успели выйти бета3 и первый релиз-кандидат.
В PostgreSQL 16 Beta 3 закрыты 2 уязвимости, они касаются расширений и MERGE. В сообщении есть важные замечания для тех, кто использует BRIN-индексы для запросов, затрагивающих NULL-величины.
А вот это почти детективный сюжет: PostgreSQL: CVE-2020-21469 is not a security vulnerability.
Здесь поясняют:
Анализ нетипичных CVE, созданных 22 августа, показал, что в этот день было добавлено около 150 отчётов (1, 2, 3, 4, 5, 6) под идентификаторами, выданными в 2020-2022 годах. Идентификаторы охватывают большое число открытых проектов и, на первый взгляд, также интерпретируют обычные ошибки, не связанные с обработкой внешних данных, как опасные уязвимости.
Как обычно, синхронно обновились 15.4, 14.9, 13.12, 12.16, 11.21. И тогда же стало известно, что поддержка PostgreSQL 11 прекратится 9 ноября.
Исправлены баги. В том числе решена проблема производительности при параллельной работе COPY на одной таблице. Список исправлений можно посмотреть на странице актуальные проблемы (open items).
Можно уже посмотреть предварительные PostgreSQL16 Release Notes.
Выход в свет общедоступной (general availability) версии PostgreSQL 16 запланирован на 14-е сентября.
PostgreSQL 17: Часть 1 или Коммитфест 2023-07
Очередная статья-обзор Павла Лузанова. Предыдущие статьи о 16-й версии, привязанные к коммитфестам: 2022-07, 2022-09, 2022-11, 2023-01, 2023-03. Вот её английский вариант (как показывает практика, он востребован).
С апреля произошли некоторые важные изменения, на которые стоит обратить внимание. И начнем с потерь. Следующие разработки были отменены:
Предварительный список вкладчиков PG 16 от Брюса. Много знакомых и знакомо звучащих фамилий.
"Не сравнивай: живущий несравним"
Но всё равно все всё со всем сравнивают, это в природе человеческой.
PlanetScale vs. Neon: the Continued Saga between MySQL and PostgreSQL
В блоге Bytebase интересное сравнение: дело дошло уже до бессерверных баз разных платформ. Автор статьи - Тяньчжоу (Tianzhou), он тимлид в Google Cloud SQL, поддерживал PostgreSQL и MySQL в Google, возглавлял отдел Database/DevTools/Collaboration в Ant Group.
Он взялся сравнивать эти новейшие базы по вот такому набору критериев:
архитектура (плюс ссылка на Vitess),
совместимость (с MySQL и PostgreSQL соответственно),
возможности совместной разработки (developer workflow),
надёжность (важная ссылка на Architecture decisions in Neon),
лёгкость в управлении (operability),
соответствие стандартам безопасности (compliance),
цены,
В паре фраз он описывает эти базы так:
PlanetScale и Neon похожи друг на друга, а каждая из них похожа на MongoDB и Snowflake соответственно:
Как и MongoDB, PlanetScale использует архитектуру shared-nothing, предоставляет удобную СУБД-платформу, одержима ориентацией на разработчиков и рассказывает впечатляющие истории успеха.
Как и Snowflake, Neon воплощает новый подход shared-storage в застоявшуюся OLTP-архитектуру, использует диалект Postgres и тоже очень заботится о разработчиках.
И PlanetScale и Neon могут стать следующими MongoDB / Snowflake в мире современных РСУБД в качестве DBaaS. Чего мы давно ждём.
На сайте компании можно найти ещё сравнения:
А вот и куда более традиционный поджанр (и это опять Тяньчжоу):
Postgres vs. MySQL: a Complete Comparison in 2023
В них несколько отличающийся набор критериев. Воздержимся от цитирования - читайте.
Или не читайте, а пробегитесь по статье Отличия MySQL от PostgreSQL. Выбираем что лучше, PostgreSQL или MySQL Кирилла Косолапова, гендира Amvera. Пересечений со статьёй Тяньчжоу, мягко говоря, немало. Зато у того нет пункта Популярность в России. А у Кирилла нет JSON и CTE.
От пятнец к гео
Наполняем до краев: влияние порядка столбцов в таблицах на размеры баз данных PostgresQL
Оригинал - On Rocks and Sand | Optimizing Postgres Column Order принадлежит Шону Томасу (Shaun Thomas). Тому самому, с которого начались ПГ пятнецы - так мы стали переводить PG Phridays. Следующая инкарнация пятнец - PGSQL Phriday Райана Буза (Rayan Booz). Она медийно преуспела. Сейчас у нас уже PGSQL Phriday #012: What Excites You About PostgreSQL 16.
Впрочем, возможно, и сам Томас когда-то где-то увидел мелькнувшие Philosophical Phridays, или Physique Phriday, или ещё что-то в этом роде. И вдохновился.
Но ближе к делу. Статьи интересны не только сами по себе. Иногда ценная информация прилетает из комментария. К переводу этой статьи Шона вот что добавил Игорь Сухоруков:
Утилита postgres_dba прячет подобные запросы за своим интерфейсом, анализирует все таблицы в PostgreSQL и выдает рекомендации по порядку столбцов и оценку экономии занимаемого места в %. Я успешно использовал этот подход в проекте openstreetmap_h3, где объем БД уже полтерабайта и будет только увеличиваться со временем.
На это автор перевода ответил: Спасибо. Стоило написать статью ради этого комментария.
Игорь и собственную статью начинает такой фразой: в публикациях на хабре, чаще всего самое интересное в комментариях. Вот эта статья, там он делится опытом создания "на коленке" интерфейсов для испытания прототипов.
Мы-то Игоря Сухорукова знаем по выступлениям на PGConf.Russia, например: Как поместить весь мир в обычный ноутбук: PostgreSQL и OpenStreetMap на недавней PGConf.Russia 2023. А на днях появилась вот такая статья:
Способ залезть в «кишочки» операционной системы, Docker из PostgreSQL с помощью SQL
Это можно теперь сделать, используя postgres_osquery. Этот инструмент работает как интерфейс к опенсорсному средству osquery, который сам является SQL-интерфейсом к операционной системе. Игорь сочинил на Python хранимку run_osquery,
которая получает на вход строку запроса к osquery, а на выходе выдает JSON, заменяя пустые строки на null. Результаты работы функции run_osquery
можно сохранять в таблицы с помощью pg_cron по расписанию - советует автор, - или же запускать на каждом узле кластера CitusDB с помощью run_command_on_all_nodes().
Или построить свое SIEM (Security information and event management) решение для хостов базы данных, используя только PostgreSQL.
Некоторые резонансные статьи
Squeeze the hell out of the system you have
Дэн Слиммон (Dan Slimmon) поделился личным опытом. База с монолитным SaaS-приложением росли, росли и перестали вмещаться по производительности в железо. Что же делать? Ну как что. Перейти на шардирование по записи или на микросервисы. Дело хорошее. Но - говорит Дэн, - это резкое усложнение, которое отольётся слёзками потом. Надо выжать из ситуации то, что можно выжать. И они выжали - максимальная загрузка процессора спустилась с 90% до 30%. Обошлись без шардов и микросервисов.
Но не все с этим согласны. Расползлась изрядная дискуссия на Hacker News. К концу все забыли про Postgres и спорили уже на философские темы оптимизации вообще.
What’s new with Postgres at Microsoft (August 2023)
Клэр Джордано (Claire Giordano, Microsoft Community Hub) обозревает с высоты птичьего полёта, как она выразилась, доработки Microsoft за 2023. Разработчики участвовали в патчах ядра, дорабатывали Citus и pg_cron. Их решения обросли мускулами: многих заинтересует появление в этом списке Patroni, PgBouncer, pgcopydb. Вот удобный список-рубрикатор:
Поскольку деятельность Microsoft традиционно способствует выбросу адреналина у сообщества open source, не могли не начаться полуконспирологические дискуссии в духе ох не к добру эта их любовь к открытому коду. Вспомнили даже статью 2019 года Антона Сёмина Как Microsoft боролась с Open Source и почему ей пришлось полюбить Linux на Skillbox Media и аж 2007-го О том, почему монополия Google лучше, чем монополия Microsoft Виталия с почти зловещим ником @Tonatos.
PostgreSQL Logical Replication: Advantages, EDB's Contributions and PG 16 Enhancements
Толковая статья Брайана Тёрифа (Bryan Turriff, EDB). В ней есть и азы, и история вопроса, и - как обещано - о вкладе EDB (2ndQuadrant), и преимущества, и недостатки, и куски кода, и о EDB Postgres Distributed (PGD), конечно, и о новом в PostgreSQL 16. Имя автора мне не знакомо. Это главный по маркетингу продуктов компании.
А вот другая новость от них:
EDB Open Sources Powerful Tool to Automate and Manage Postgres Deployments
Компания отдала в опен сорс свой инструмент для разворачивания и настройки высокодоступных (HA) кластеров. Называется он Trusted Postgres Architect (TPA). Подробности, возможно, в следующий раз.
Некоторые релизы
Supavisor: Scaling Postgres to 1 Million Connections
В статье Егора Романова, Чейза Грэнберри (Chase Granberry) и Станислава Мужика (Stanislav Muzhyk) рассказывается об их пулере. Он построен на Elixir (язык поверх Erlang, создатель - Жозе Валим (José Valim) участвовал и в этой разработке Supabase). Создавался пулер сразу с расчётом на мультиарендность (multi-tenancy). Линейные графики масштабируемости действительно впечатляют. Пока что вышла версия даже ещё не 1.х, а только 0.9.0.
В этом релизе нет решающих изменений, но он, как минимум, демонстрирует, что проект жив-здоров. Поддерживает его Дейв Креймер (Dave Cramer), а в репозитории есть пометка со ссылкой на отца-основателя Джо Конвея (Joe/Joseph E Conway): forked from jconway/plr. Джо, похоже, проектом уже не занимается.
Версия учитывает изменения в PostgreSQL 16. Есть сборки для Windows с R версий 4.1.3 и 4.2.3. Все изменения здесь.
Hydra - колоночный Postgres для аналитиков. Разработчики утверждают: всё так хорошо распараллелено, что запросы, которые исполнялись бы недели, дадут ответ за минуты. И что можно смело делать запрос к миллиардам строк. Вакуум тоже оптимизирован под колонки. Хранение векторное. Следуя моде, там оптимизировали и поиск сходства (similarity search).
До этого 4 месяца испытывали версию со скромным названием 0.3.0 альфа. Обещают, что версия 1.0 GA (общедоступная) появится уже совсем скоро. Hydra построена поверх Citus Columnar, которая, в свою очередь, представляет собой модернизированную версию расширения cstore_fdw. Репозиторий здесь.
pgvector
Понемногу превращается в нашу постоянную рубрику. Возможно, под влиянием статьи Джонатана Каца Vectors are the new JSON in PostgreSQL.
Machine Learning challenge: Chihuahua vs Muffin with PostgreSQL and pgvector
Франческо Тизьё (Francesco Tisiot) в блоге DEV Community предлагает убедиться, что, вооружившись pgvector-ом можно легко и быстро разобраться с известным (в определённых ИИ-кругах) мемом: научить сеть отличать собачку чихуахуа (идентичней так: чиуауа) от печеньки с изюминами вместо глаз и носа. Пробовать питонные ноутбуки можно так: вот ноутбук, вот датасет для обучения, вот бесплатный PostgreSQL на Aiven.
An early look at HNSW performance with pgvector
Джонатан Кац (Jonathan Katz) признаётся, что не работал над HNSW - новой фичей 0.5.0, только тестировал её (но над pgvector работал). Делится сведениями о новом алгоритме, и приступает к тестированию performance/recall (полнота - переводят, например, здесь). Для сравнения Джонатан взял pg_embedding. В прошлом номере мы писали о расширении pg_embedding, которое разработал Neon. Теперь они его закоммитили в pgvector.
HNSW Indexes with Postgres and pgvector
Большая статья Кристофера Уинслета (Christopher Winslett, Crunchy Data). В ней красивые и наглядные схемы, разные аспекты работы с этим алгоритмом.
И вот, наконец, явился сам pgvector 0.5.0
В этой заметке о его выходе сообщают о том, к чему нас заранее готовил Джонатан. Но ещё и говорится об агрегате sum
и функции l1_distance
. Вот здесь новое.
После официального релиза Джонатан продолжил разъяснять и тестировать:
pgvector 0.5.0 Feature Highlights and HOWTOs
И не только он. В блоге Supabase её сотрудник Егор Романов (Egor Romanov) тоже продолжил тестирование ivfflat и HNSW:
pgvector v0.5.0: Faster semantic search with HNSW indexes
И повсюду продолжается добавление pgvector в свои продукты. pgvector добавили и в DBLab Engine, о них подробней ниже. Они (postgres.ai) объясняют это следованием очевидному тренду, ссылаясь на Google Cloud:
Unlock the power of gen AI with the pgvector PostgreSQL extension
Из сообщения Сандхьи Гхаи (Sandhya Ghai) и Балы Нарисимхана (Bala Narasimhan) следует не только то, что Cloud SQL for PostgreSQL и AlloyDB for PostgreSQL теперь поддерживают pgvector, но и что умеют работать с предобученными моделями через Vertex AI, которая сама по себе векторная база данных (не реляционная) и Matching Engine ANN service (ANN=Approximate Nearest Neighbor).
Database Lab => DBLab 3.4
DBLab 3.4: new name, SE installer, and lots of improvements
Эта своеобразная система клонирования баз нашему отделу Образования Postgres Professional совсем не чужая:
Для автоматической проверки заданий использовалась система, которую разработал наш коллега Илья Баштанов на основе Database Lab Engine. Она поддерживает пул тонких клонов PostgreSQL и запускает на них весь набор тестов в параллель. Вообще-то мы собираемся использовать эту систему для создания собственного SQL-блекджекатренажера, но это уже совсем другая история.
- Это Егор Рогов рассказывает о задачах третьего этапа олимпиады «IT-Планеты» по PostgreSQL.
Имя изменилось, да. Но, скорее, косметически: было Database Lab Engine, стало DBLab Engine. А вот внутренности изменились сильно: самое большое количество изменений за всё время существования - говорит Николай Самохвалов (Nikolay Samokhvalov), основатель и глава Postgres.ai. Вот здесь они все перечислены.
Появился платный инсталлятор для платной версии - DBLab Engine SE. Есть изменения в опциях конфигурации. Починили перезапуск контейнеров клонов. Теперь можно, например, запустить pg_upgrade -k
внутри некоторого контейнера клона и сразу начать тестировать изолированно новую мажорную версию Postgres.
Образование, азы, наука, полезные развлечения
Итоговая конференция Летней школы Postgres Pro в Новосибирске : Компания Postgres Professional
11-го августа в Новосибирске прошла итоговая конференция Летней школы Postgres Professional на базе Новосибирского государственного университета. 15 финалистов представили 12 групповых и самостоятельных проектов, которые были посвящены средствам для тестирования BiHA, потоковой репликации и мультимастеру, развитию расширения pgsphere.
Открыта запись на бесплатный курс «Основы технологий баз данных» от Postgres Professional
Обучение пройдет с 16 сентября по 23 декабря в дистанционном формате. Программа построена на основе одноимённого учебного пособия коллектива авторов СПбГУ под руководством Бориса Асеновича Новикова. Курс читает технический директор ООО «Биллинговый центр» группы компаний cистемы «Город» — Давыдов Евгений Станиславович, чей опыт работы с базами данных составляет более 30 лет.
Customizing SQL Functions in PostgreSQL: Exploring Various Approaches
Давид Джан (David Zhang) из канадского отделения китайской High Go нередко появляется в наших обзорах. На этот раз он учит писать Hello World вычислять a+b разными способами:
SQL;
PL/pgSQL;
PL/Tcl (как ни странно);
PL/Perl;
PL/Python;
системная функция на C;
расширение.
Авторы - Е. В. Иванова, М. Л. Цымблер. Напомним, что в номере Postgresso 8-9 (45-46) была маленькая главка о Михаиле: Интересный автор. Его работы по параллельным базам данных базируются на PostgreSQL, их можно найти на таких ресурсах как academia.edu (нужен эккаунт). Вот презентация о «Приручении слонов»: Embed Parallelism into PostgreSQL. Вот его страничка с курсами.
Fun with PostgreSQL Puzzles: Recursive Functions with Animations
Грег Сабино Муллани (Greg Sabino Mullane) из Crunchy Data продолжает развлекать пытливых постгресистов. Всё это опять в рамках Advent of Code, о котором мы немного говорили в номере Postgresso №6 (55).
Инструментарий, конечно, рекурсивными функциями не ограничивается. Грег задействует ещё и CTE, regexp_split_to_array и GREATEST/LEAST.
Конференции
Итоги PGConf.Сибирь 2023 в Томске
Среди итогов: доклады представили эксперты Postgres Professional, Sibedge, «Лукойл» и других компаний. И ещё: cотрудники Postgres Professional выступили с докладом в секции Лекции на траве.
Напоминаем о PGConf.СПб 2023
PGConf впервые пройдёт 25 сентября в Санкт-Петербурге. Конференция будет называться PGConf.СПб 2023. Место - Отель «Коринтия», Невский проспект., д.57.
А до этого состоится Стачка 2023 - IT-конференция в Ульяновске
И вот кто будет выступать на Стачке.
Неполное собрание сочинений Лоренца Альбе
Online Data Type Change in PostgreSQL
Изменить тип данных в большой таблице - это всегда головная боль. ALTER TABLE получает Exclusive lock, и таблица становится недоступна на чтение и запись. Лоренц Альбе (Laurenz Albe, Cybertec) рассказывает, как свести эти блокировки к минимуму.
Subqueries and performance in PostgreSQL
Как всегда над статьёй забавная картинка. Но это не главное. Он опять глубоко копает. В данном случае предлагает различать скалярные запросы и табулярные, разбирает разновидности подзапросов с точки зрения проблем производительности и их разрешения.
А в этой статье Лоренц ныряет в механизмы выделения памяти в C:
Memory Context: How Postgres Allocates Memory
Он рассказывает о концепте контекстов памяти как о средстве (попытке) обезопасить Postgres от утечек памяти, нередко случающихся в C; объясняет архитектуру контекстов и напоминает о представлении pg_backend_memory_contexts и функции pg_log_backend_memory_contexts(), которые дают возможность заглянуть в эти структуры.
Use HOT, so CLUSTER won’t rot in PostgreSQL
Совет "используйте хоты, дабы не протух кластер" - не исчерпывает содержание этой статьи Лоренца. Он объясняет механизмы распухания индексов и таблиц, которые подвергали кластеризации, объясняет связь эффективности HOT Updates и fillfactor, потом запускает pgbench и демонстрирует количественные зависимости.
На этом пока всё.