По некоторым причинам этот номер сдвоенный, дальше Postgresso продолжит выходить в обычном, ежемесячном режиме.
Релизы Postgres
PostgreSQL 15 — Beta 3-4, RC 1-2 и, теперь GA
Свершилось! Главное событие — конечно, это выход уже официальной, общедоступной (general availability) 15-й версии:
PostgreSQL 15 Released!
Среди главных новшеств называют:
- поддержка SQL-команды MERGE;
- избирательная публикация содержания таблиц благодаря возможности определить список столбцов и условия в фильтрах;
- больше опций при сжатии, в том числе сжатие Zstandard (zstd); в том числе поддержка сжатия на стороне сервера в процессе pg_basebackup;
- поддержка структурированного вывода логов в JSON-формате;
- увеличение производительности, особенно при сортировке в памяти и на диске
Можно, однако, сказать, что на самом деле главное событие произошло не сейчас, а ещё в фазе PostgreSQL 15 Beta 4. Тогда откатили большую серию патчей, связанных с SQL/JSON.
Патчи отложили на PostgreSQL 16 (можно смотреть всю ветку, дискуссия здесь. Чтобы корректно откатить SQL/JSON, пришлось изменить 60 (!) файлов. Среди того, что откатили:
Депеш (Hubert depesz Lubaczewski) пишет: я сам в марте и апреле писал о грядущих великих возможностях (great feature) полной реализации SQL/JSON. Увы, всё пришлось откатить (удалить из исходников) не только из PostgreSQL 16, но и из «почти готовой» PostgreSQL 15.
Наш коллега Егор Рогов (автор PostgreSQL изнутри) не унывает:
Мне в этой истории нравится, что, во-первых, много людей до самого последнего помогали Никите [Глухову] с патчами, во-вторых, что он сам не бросал задачу, и, в-третьих, что сообщество не пошло на то, чтобы оставить недоведенный до ума код или нарушить релизный цикл. Надеюсь, что счастливый конец все-таки случится, но теперь уже через год.
Чтобы узнать о новом в 15-й версии, имеет смысл послушать/посмотреть доклад на PGConf.Russia 2022 руководителя отдела образовательных программ Postgres Professional Павла Лузанова. Там, соответственно тем временам, много посвящено SQL/JSON, но это не пропадёт: не в PG 15, так в PG 16, опять же.
Немного о мелочах, случившихся до выхода официальной PostgreSQL 15: некоторые изменения были и в PostgreSQL 15 RC 1
(Release Candidate 1) относительно Beta 4:
- Синтаксис публикации схемы при логической репликации поменялся на CREATE PUBLICATION… FOR TABLES IN SCHEMA ...;
- публикации при логической репликации теперь могут публиковать таблицы внутри схемы, если определены и схема, и таблица;
- запрещена публикация схемы, если определена таблица со списком столбцов, подлежащих репликации;
- запрещено создание новой базы данных, если её ICU-локаль не поддерживается.
Ну а в RC 2 опять произошёл откат назад: отказались от optimized order of GROUP BY keys.
Postgres 15 Configuration Changes
Появились 6 новых конфигурационных настроек в
postgresql.conf
:-
recovery_prefetch
(по умолчаниюtry
), -
wal_decode_buffer_size
(по умолчанию 512kB), -
archive_library
(''), -
recursive_worktable_factor
(по умолчанию 10), -
log_startup_progress_interval
(по умолчанию 10 сек.), -
stats_fetch_consistency
(по умолчаниюcache
),
В трёх — изменения:
-
log_checkpoints
(по умолчаниюon
вместоoff
), -
log_autovacuum_min_duration
(по умолчанию 10 мин. -1), -
hash_mem_multiplier
(по умолчанию 2.0 вместо 1.0).
И один параметр отменили:
stats_temp_directory
.Что это за параметры и с чем их едят, смотрите в этой короткой заметке от RustProof Labs и в документации. А список изменений здесь же на RustProof.
Be Ready! Public schema changes in Postgres 15
Об этом предупреждает Пол Рэмзи (Paul Ramsey, Crunchy Data). Его вывод: хотя в PostgreSQL 15 больше нет глобальной привилегии на запись в схеме public, несложно организовать совместную работу пользователей на том же уровне, используя пользовательские схемы и роли.
A 'public' Schema Change in Postgres 15
В блоге Андреаса Шербаума (Andreas Scherbaum), который называется Ads' Corner, Андреас объясняет, почему привилегия CREATE больше не даётся по умолчанию на схему public, и как с этим быть, переходя с PostgreSQL 14 на 15. Подытоживая, он пишет: а лучше всего вообще не полагаться на то, что можно писать в схему public.
Образование
Как-то так сложилось, что в этом выпуске много образования.
PostgreSQL Internals
Вышла 3-я часть английской версии книги Егора Рогова: PostgreSQL 14. Part III.
Part III. Locks. Relation-Level Locks · Row-Level Locks · Miscellaneous Locks · Locks in Memory.
PDF можно скачать по той же отсюда. Каждая новая переводная глава будет и дальше добавляться в этот PDF. Постоянная страница, посвященная книге, <a postgrespro.com/community/books/internals>здесь.
Learning PostgreSQL Internals
Ещё Internals — от Пола Рэмзи. Это обзор источников по Postgres, куда вошли другие Internals, например The Internals of PostgreSQL Хиронобу Сузуки (Hironobu Suzuki). В целом обзор Пола ориентирован прежде всего на классиков-разработчиков Postgres, поэтому в нём упомянут Олег Бартунов, но нет ссылки на книгу Егора. Не убудет: английская версия (не говоря о русской) щедро упоминается в англоязычном Postgres-интернете.
Майкл Стоунбрейкер
Architecture of a Database System
Эта большая работа, в которой великий Майкл Стоунбрейкер (Michael Stonebraker, MIT) и его соавторы — Джозеф Хеллерстайн (Joseph M. Hellerstein, Калифорнийский Университет в Беркли) и Джеймс Хамильтон (James Hamilton, Microsoft Research) сформулировали (в данном случае в 2007-м году) базовые принципы построения СУБД.
Впрочем, Рэмзи ссылается на другую работу Стоунбрейкера:
The Design Of Postgres в соавторстве с Лоуренсом Роу (Lawrence A. Rowe).
Курсы CMU Database Group
Аббревиатура CMU — это Университет Карнеги Меллон. Там, прежде всего, очень активно преподаёт известный нашим читателям профессор Энди Павло (Andy Pavlo).
Вот планы на осень этого года: CMU 2022. А вот PDF-файл с концепциями СУБД: Database System Concepts, авторы Абраам Зильбершац (Abraham Silberschatz, Yale University), Хенри Корт (Henry F. Korth, Lehigh University) и С. Сударшан (S. Sudarshan, Indian Institute of Technology, Bombay — нигде не нашёл полного имени, везде просто S). На этой книге основаны лекции Энди.
А это плейлисты CMU Group с многочисленными лекциями. Расписание лекций (старое, но там ссылки на файлы).
Вот один из примеров лекций, говорящий о глубине проникновения в тему: 06 — Memory Management + Buffer Cache (CMU Intro to Database Systems / Fall 2022)
Основы и тенденции
Советуем обратить внимание на эту серию: Foundations and Trends in Databases.
Вышло 12 томов. Главред серии Джозеф Хеллерстайн (Joseph M. Hellerstein, University of California, Berkeley) и Сураджит Чаудхури (Surajit Chaudhuri, Microsoft Research, Redmond)
Pagila 3.0 и Sakila
Pagila начиналась как опенсорсный вариант демонстрационной базы Sakila. Поэтому сначала 2 слова о Sakila.
Это хорошо нормализованная база как бы некоторого магазина, раздающего в аренду DVD, в ней фильмы, актёры, отношения фильм-актёр и главная таблица, связывающая фильмы, магазины, аренду, сотрудников, платежи — всего 15 таблиц. Её создавали как демонстрационную для MySQL, но позже просто отдали по BSD License. Ниже описана ссылка на статью, где её данные используются для демонстрации «графических» возможностей SQL.
Но Pagila развивается параллельно Sakila, и наращивая возможности. В новой версии:
- демонстрационные данные JSONB (основаны на пакетах из apt.postgresql.org и yum.postgresql.org;
- поддержка docker compose;
- теперь можно создавать базу Pagila в докере по шагам;
- даты в данных обновлены до 2022-го года.
Готовы RPM-ы, лежат в репозиториях YUM и zypp. Тарбол выложил Деврим Гюндюз (Devrim Gündüz). Сообщение об этом здесь.
В персональном блоге Деврима на Планете Постгрес много небольших статей, в которых он обычно об установке PostgreSQL и сопутствующего софта на RHEL или Rocky Linux. Например, он выложил пакеты consul и haproxy в репозиторий PostgreSQL RPM для поддержки patroni, чтобы можно было использовать последние версии этих пакетов. Но оказалось, что эти пакеты могут поломать уже существующие инсталляции, такие как HAProxy 1.8.4 RPM на RHEL 8. Поэтому, чтобы не ломать чужое окружение, выложил новые pgdg-rhel9-extras, pgdg-rhel8-extras и pgdg-rhel7-extras — для RHEL 9/8/7 соответственно — см. New repo: Extra packages for PostgreSQL RPM repo.
Sakila и картинки из ASCII-символов
How to Plot an ASCII Bar Chart with SQL — полезное развлечение в ностальгическом духе: как построить диаграммы-столбики исключительно средствами SQL? Это можно сделать, хотя выйдет и не так эффектно, как популярные на заре ЭВМ портреты ASCII-символами.
Скрипты лежат здесь. Для примера использовали упомянутую выше учебную базу Sakila. Автор — Лукас Эдер (Lukas Eder), вообще-то, специалист по JOOQ (Java-библиотеке для объектно-ориентированных запросов на базе SQL).
Кстати, об ASCII: Лука Феррари (Luca Ferrari, опенсорс-«адвокат» и человеческое существо, хотя на фото кот) напоминает в PostgreSQL ASCII numeric operators о том, что популярные операторы с числами можно представить ASCII-символами:
-
|/
этоsqrt
; -
||/
этоcbrt
; -
@
этоabs
.
Игровые площадки Postgres
Learn Postgres at the Playground — Крейг Керстинс (Craig Kerstiens, Crunchy Data) обнародовал серию интерактивных обучающих материалов по Postgres. К ним — свежие советы.
PostgresPro EDU
Появился новый телеграм-канал PostgresPro EDU. В нём уже целая серия полезных сообщений. Первое сообщение канала: Postgres Professional совместно с ГАИШ МГУ запустили онлайн-курс «Язык SQL» для студентов по изучению системы управления базами данных PostgreSQL. Он построен на основе учебного пособия Евгения Павловича Моргунова PostgreSQL. Основы языка SQL.
С 21 сентября 2022 года открыт доступ к первым видеоурокам на платформе «Открытое образование» для тех, кто уже успел записаться ранее, и для будущих слушателей.
Всего запланировано 9 тематических разделов:
- элементы теории баз данных;
- введение в язык SQL;
- типы данных СУБД PostgreSQL;
- основы языка определения данных;
- запросы;
- изменение данных;
- индексы;
- транзакции;
- повышение производительности.
Есть информация о грядущих мероприятиях Postgres Professional:
23 октября 2022 приглашаются студенты новосибирских вузов. Встреча в главном корпусе НГУ (ул. Пирогова 1, этаж 3, аудитория 3107). Начало встречи в 14-00. Бесплатно. А 24-го октября состоится PGConf.Сибирь.
На 26 октября 2022 запланирован PGMeetup.Барнаул для студентов, преподавателей, IT-специалистов и всех, кто интересуется Postgres. Есть программа). Алтайский государственный университет (пр-т Социалистический, д. 68, аудитория 1С). Начало в 18-00. Тоже бесплатно.
К слову, мероприятие из этой серии прошло в Нижнем Новгороде — PGMeetup.NN. Ещё один митап — в Москве, там обсуждались типичные ошибки разработчиков приложений при работе с СУБД Postgres, способы сжатия данных в PostgreSQL и шардирование данных.
Интересный автор: Михаил Цымблер
Хочу обратить ваше внимание на специалиста по СУБД из университетской среды: Михаил Цымблер (в латинице Mikhail Zymbler) работает в ЮУрГУ (Челябинск). Ни разу не встречал его на конференциях по базам данных, зато много раз на конференциях по параллельным вычислениям. Михаил занимается разными вещами, в том числе ИИ для медицины. Его работы по параллельным базам данных базируются на PostgreSQL. Их можно найти на таких ресурсах как academia.edu (нужен эккаунт). Вот презентация о «Приручении слонов»: Embed Parallelism into PostgreSQL. Вот его страничка с курсами.
Электронные книжки от pganalyze
- Advanced Database Programming with Rails and Postgres;
- Best Practices for Optimizing Postgres Query Performance;
- Effective Indexing in Postgres;
- Finding the root cause of slow Postgres queries using EXPLAIN;
- Efficient Search in Rails with Postgres;
- The Most Important Events to Monitor in Your Postgres Logs.
книга: Mastering PostGIS and OpenStreetMap
Эту книгу написал сотрудник RustProof Labs Райан Ламберт (Ryan Lambert). Он же дал ссылку на одну из главок в открытом доступе. А так сама книга стоит 100 баксов.
PG(SQL)-пятнецы
Так мы в своё время перевели Phridays. Недавно родился любопытный проект, который придумал Райан Буз (Ryan Booz, CTO EnergyCAP), названный им PGSQL Phriday: раз в месяц представители Postgres-сообщества пишут в блог. Но не абы что. Пока предлагается написать 2 справедливые заметки и одну фейковую.
Райан признаётся, что вдохновение для топика первой пятнецы он черпал из доклада Ильи Космодемьянского на PGConf NYC: PostgreSQL Worst Practices (но мы даём ссылку на русскоязычную версию на Highload++, а сам Илья, возможно, вдохновлялся Вредными советами Григория Остера). Короче, в этой игре Райана один из трёх советов должен быть вредным.
По поводу нейминга: Райан не знал, что Пятнецы до него уже придумал Шон Томас (Shaun Thomas). Шон не обиделся. Пятнецы Шона назывались чуть по-другому: PG Phridays, и какое-то время проходили каждую пятницу, а не раз в месяц, как у Райана. И начинал Шон пятнецы летом 2015-го (и тоже с вредных советов: 10 Ways to Ruin Performance: In The Loop), и только через пару лет этот блог перекочевал под крышу 2ndQuadrant (EDB).
Тем, затронутых Шоном, не перечислить. Мы ссылались, например, на такие:
- проблемы с ID транзакций;
- неприятные сюрпризы репликации;
- MVCC и почему надо быть внимательным с хранением.
А позже — на Tidying Up With VACUUM
Открытия/Закрытия
Distributed Postgres goes full open source with Citus: why, what & how
Citus открыли теперь уже все фичи своего Enterprise в Citus 11. Джелте Феннема (Jelte Fennema) объясняет:
Это связано с изменением бизнес-модели. Citus начинался как форк PostgreSQL в 2011, тогда бизнес-модель была построена на продаже Enterprise-лицензий и контрактов по поддержке. В 2016 мы отказались от идеи форка (un-forked) и открыли основную массу кода. После этого мы отделяли Enterprise с его лицензиями от открытой версии, включая туда дополнительные Enterprise-фичи.
Но со временем бизнес-модель стала меняться в сторону от продажи Enterprise-лицензий. Сейчас наша бизнес-модель построена вокруг управляемых услуг (managed service): Azure Database for PostgreSQL — Hyperscale (Citus). Как вы догадываетесь, мы добавляем к опенсорсному Citus фичи для управления.
Полный список открытых энтерпрайзных фич здесь. Среди них, например, неблокирующий ребалансировщих шардов (non-blocking shard rebalancer — до этого ребалансировщик был открыт, но non-blocking не был там доступен). Можно почитать блог о Citus 11.1, гитхаб здесь.
Cloudflare Open Sources Its PgBouncer Fork
CF PgBouncer
Cloudflare поддерживала внутренний форк PgBouncer, в который добавляла багфиксы аутентификации и новшества, связанные с изоляцией пользователей (использование CPU и памяти, дисковые операции ввода-вывода). Теперь, пишет Джастин Кван (Justin Kwan, Cloudflare), код открыт.
А вот руководство Heroku сделало движение в противоположном направлении: Removal of Heroku free product plans. Они даже назвали это красиво Новая глава: Heroku’s Next Chapter
Опубликована Heroku Roadmap. Мудрый Боб Уайз (Bob Wise, Heroku General Manager и исполнительный вице-президент Salesforce, владеющей сейчас Heroku) говорил о важности этого шага для надёжный поддержки тех больших и малых клиентов, которые сделали ставку на Heroku, о фокусировке на mission critical и о том, что бесплатные планы и неактивные эккаунты будут ликвидированы. Но продолжится вклад в открытый код Cloud Native Buildpacks.
Анонимайзеры
Сразу несколько читателей наших выпусков интересовались этим классом ПО. Набросаем некоторые ссылки с краткими комментариями.
PostgreSQL Anonymizer 1.1
Мы не раз писали об этом расширении Dalibo (в
shred_preload_libraries
в postgresql.conf
просто anon
, разработчик Дамьян Клошар, Damien Clochard), следили за его взрослением. PostgreSQL Anonymizer прячет или заменяет персональные данные (personally identifiable information — PII), или коммерческие данные в базах PostgreSQL. Поддерживает 3 стратегии анонимизации:- динамическое маскирование (dynamic masking),
- статическое маскирование (static masking) и
- anonymous dumps (просто экспорт маскированных данных в SQL-файл).
Расширение предлагает набор функций маскирования, таких как:
Substitution, Randomization, Faking, Pseudonymization, Partial Scrambling, Shuffling, Noise Addition and Generalization. Названия их говорят за себя, на этой страничке документации есть ссылки.
В версии 1.1 появилась защита данных по умолчанию. Это значит, что все столбцы по умолчанию (без объявления правил маскирования) маскируются. Но эта возможность пока в бета, а станет готовой для промышленной эксплуатации только в 2.0.
Другое изменение — в Anonymous Dumps (pg_dump_anon).
pg_dump_anon
было bash-криптом. Его полностью переписали на Go. Старый скрипт переименовали в pg_dump_anon.sh
и сохранили для обратной совместимости. Но в версии 2.0 его уже не будет.Можно почитать об этом, например, в блоге Alibaba Cloud How to Mask Sensitive Information on PostgreSQL Using Anon Plug-in. Там есть примеры разных типов маскирования.
Data Masking For PostgreSQL
В статье говорится о расширении pg_datamask, разработанном в Cybertec. Интересно, что можно выбрать один из двух путей: простой — generic masking: есть библиотека, в которой есть всё (утверждают в статье) для эффективного маскирования. Почти всегда этого достаточно. Если нет, то можно самому написать нужные функции для маскирования данных.
Open Diffix (pg_diffix)
pg_diffix — расширение PostgreSQL для сильной динамической анонимизации. Оно гарантирует, что результаты простых SQL-запросов будут анонимизированы. Его можно бесплатно скачать, а можно попробовать онлайн-демо. На их гитхабе есть много учебных материалов по diffix:
обучалка для админа,
руководство админа,
книжка банкира (с правдоподобными данными) и
руководство для аналитика.
sepgsql
Это известный загружаемый модуль для мандатного доступа. В нём есть возможности маскирования.
PLV8
Мне доводилось собирать plv8. Это, как минимум, требует времени и усилий. А язык важный, он, хоть и не входит в 4 языка «из коробки» для PostgreSQL (кстати, почитайте статью Ивана Панченко PostgreSQL: Серверное программирование на «человеческом» языке: PL/Perl, PL/Python, PL/v8), но он мощный и удобный, и пользуются им часто.
После изрядного перерыва в августе вышли 2 версии PL/v8 (расширения plv8):
plv 8 3.1.4
и
plv 8 3.1.3
А на днях Алексей Фадеев, старший разработчик .NET компании sibedge (Томск), сообщил, что они собрали докер-образы plv8 с PostgreSQL 15. Недавно у них появилась поддержка arm64 — это логично, так как компания стремится собирать самые компактные образы. Образы от sibedge собраны на основе официальных образов Postgres. Как и официальные, они собраны под два дистрибутива: стабильная версия Debian и alpine (размер alpine-образов почти вдвое меньше).
Интересно, что образы в двух репозиториях:
sibedge/postgres-plv8 (сборка по умолчанию) и
sibedge/postgres-plv8-bigint (сборка с поддержкой сериализации BigInt) — sibedge рекомендует к использованию образ sibedge/postgres-plv8-bigint, поскольку при работе с версией по умолчанию все значения BigInt конвертируются в строки (это не только значения колонок типа bigint, но и результаты агрегатных функций, например count или sum).
Подробности, доступные платформы здесь. А здесь история вопроса.
О своей работе и о выборе технологий Алексей рассказывал на PGConf.Russia 2022:
Сборка plv8: от архива с бинарниками до компактного докер-образа.
Мониторинг и тюнинг
check_pgactivity 2.6
check_pgactivity — PostgreSQL-плагин для мониторинга под Nagios. Он призван упростить работу с метриками производительности. В новой версии:
- совместимость с PostgreSQL 14;
- новый сервис
session_stats
для сбора сессионных данных; - сервис
autovacuum
теперь не показываетmax_workers
для версий 8.2 и ниже.
Tuning Linux kernel for PostgreSQL
Майкл Абоуджи (Michael Aboagye, Vettabase) создал роль в Ansible для тонкой настройки ядра Linux. В статье он говорит о параметрах:
kernel.shmmax
,kernel.shmall
,vm.swappiness
,vm.overcommit_memory
,vm.overcommit_ratio
,HugePages
,vm.dirty_background_ratio
,vm.dirty_ratio
.Маркетинговый смысл этой статьи в том, что в конце автор предлагает обратить внимание на продукт компании, в которой работает: PostgreSQL Health Check
Harnessing Shared Buffers (and Reaping the Performance Benefits) — Part 1
Шон Томас (Shaun Thomas, EDB — о его PG-Пятнецах выше в обзоре) демонстрирует на бенчмарках («старая добрая pgbench», HammerDB TPROC-C и TPROC-H).
В перовой части пока выводы такие: склады данных большого объёма лучше работают с небольшими объёмами памяти, выделенной в Shared Buffers, так как большинство страниц используются только 1 раз. Поддерживать такие страницы в буфере дороже, чем отдать их в распоряжение ОС. При OLTP-нагрузках картина совсем другая.
Но в первой части тесты крутились на системам с жёсткими дисками. Во второй будут результаты с NVM и большими RAM. Обещаны сюрпризы.
Using BUFFERS for query optimization
Майкл Кристофайдес (Michael Christofides, pgMustard) объясняет, что такое shared, temp, local, hit, read, dirtied и written. Конечно, он рекомендует использовать pgMustard, иллюстрируя примеры симпатичными скриншотами. И агитирует за их патч: включение BUFFERS в EXPLAIN по умолчанию. Соавтор патча — соведущий подкастов Postgres.FM Николай Самохвалов, вот его статья EXPLAIN (ANALYZE) needs BUFFERS to improve the Postgres query optimization process на эту тему.
Postgres memory allocation and OS memory allocation
Фриц Хоогланд (Frits Hoogland) опубликовал даже не совсем статью. Скорее, приглашение обсудить некоторые найденные им странности при алокации памяти под безымянные блоки PL/pgSQL. Исследования средствами gdb и линуксовой командой smem дают радикально разную информацию об освобождении памяти. На момент написания нашего обзора никто не откликнулся на его зов о помощи.
PostgreSQL – how to detect and solve memory availability issues
Речь идёт об Awide — решении для управления и мониторинга, о том, как его использовать. Там есть окошко, напоминающее монитор в Windows, но каждая строчка это SQL-запрос. Увидев прожорливый запрос, можно глянуть подробней. Есть профайлер запросов, который рисует кривую потребления памяти во времени.
Память считается доступной, если фоновый процесс postgres может алоцировать память без свапирования. Потребление и остаток рассчитываются по-разному для разных платформ, и собирается из нескольких величин. Когда свободная память опускается ниже пороговой величины, приходит предупреждение. Разработчик — тель-авивская фирма Awide Labs.
Не на ту же, но на родственную тему: Параллелизм в PostgreSQL: не сферический, не конь, не в вакууме (её англоязычный вариант)
Ещё статьи
5 years in PostgreSQL major versions performance — anything surprising?
Каарел Моппел (Kaarel Moppel, Cybertec) решил количественно сравнить производительность PostgreSQL версий 10 и 15 на небольшом наборе запросов, используя pgbench. Спойлер: 15-й победил по сумме. Но не то, чтобы очень убедительно. Каарел даже пожалел, что вполне работоспособного старика скоро выпроваживают на незаслуженную EOL. В статье есть о JIT, о (не)надёжности тестирования в облачной среде. Выявлены две не очень впечатляющие аномалии в производительности PostgrSQL 15 Beta 2.
A New Approach to Sharding for Distributed PostgreSQL
Дмитрий Урсегов, разработчик Postgres Professional, специалист по шардингу, обозревает нынешнее состояние postgres fdw, на базе которого и делается шардинговое решение Postgres Pro. Рассказывает об узких местах при планировании шардинговых запросов. После теоретической части делится результатами TPC-C своего решения и сравнивает с другими шардинговыми решениями.
Кстати, Дмитрий помог и некоторыми интересными ссылками, которые вошли в этот выпуск — спасибо. Спасибо Николаю Попову и Михаилу Жилину — за то же. Егор Рогов и Павел Лузанов помогают всегда, это даже не буду дальше оговаривать.
Future Proofing SQL with Carefully Placed Errors
Интересная тема. Прямая совместимость кода SQL. Её в нашей литературе ещё называют восходящей. С обратной проще: код известен, данные и API тоже. А вот предвидеть будущие данные и API, которые, возможно, придётся поддерживать — это намного сложней.
Автор, Хаки Бенита (Haki Benita), хорошо известный в Postgres-сообществе, считает, что с проблемой прямой совместимости, в общем, справляются, но вот в мире SQL с этим плохо. Статья его не теоретическая: он сразу начинает со своего демонстрационного кода: системы платежей. Он делает ошибку, которая проскакивает незамеченной. Это не дело. Чтобы такого не происходило в будущем, он пишет простенькую функцию с RAISE EXCEPTION.
Для этой же цели можно использовать появившуюся недавно Python-функцию assert_never. Но есть забавный хак, позволяющий вообще обойтись без функции, вызывающей ошибку. Можно просто написать ELSE 1/0 в блоке CASE. Ещё один хак — ELSE с приведением типа.
Ускоряем работу с графами в 20000 раз
Автор, Никита Ляпин ака Spinifex хранит большие графы (65536 узлов и каждый из них связан с каждым, 4294967296 связей) в PostgreSQL и обходит их рекурсивными SQL-запросами. Он использует некоторый алгоритм сжатия графов, который действительно может давать такой выигрыш. Потом он тестирует и на реальных графовых данных, это тоже работает, хотя и не так эффектно. Специализированные графовые базы данных и языки запросов упоминаются, но не рассматриваются и не тестируются. Интересные обсуждения в комментариях.
Как реляционная СУБД делает JOIN?
Тот же автор. Теперь он реализует JOIN на C#, на SQL, тестирует на PostgrSQL и строит графики.
Разработчики на C# или других ООП языках часто воспринимают СУБД как всего лишь хранилище, — говорит он, — они считают, что бизнес-правила в SQL — это плохо. В противовес им создаются библиотеки вроде Linq2Db: весь код пишется на C#, но затем этот код транслируется на SQL и выполняется на стороне СУБД.
На C# в явном виде, естественно, Никита реализует Nested Loop, Merge Join и Hash Join. Графики производительности причудливо переплетаются. Затем, он возвращается к идеологии СУБД (между прочим, ссылаясь как на авторитет на книгу Хиронобу Сузуки, о которой мы говорили выше) и PostgreSQL в частности. И в некоторых случаях СУБД обгоняет C#.
Для получения данных СУБД динамически выбирает алгоритм, наиболее эффективный в данном случае. В C# аналогичных библиотек или реализаций просто нет.
И не надо — автор отдаёт себе отчёт, что каждому своё. Заодно напоминаем об увлекательной статье коллеги Павла Толмачёва о причудливом поведении планировщика: Как работает оптимизатор PostgreSQL при большом количестве таблиц в запросе
Как ускорить работу PostgreSQL с помощью конфигурации базы и оптимизации запросов
Администратор баз данных в Southbridge и ведущий инженер компании Data Driven Lab Иван Чувашов. Эта статья — конспект бесплатного вебинара об оптимизации PostgreSQL от «Слёрма». Некоторые тезисы статьи вызвали полемику в комментариях.
Where Did the Stats Collector Go in Postgres 15?
PostgreSQL отслеживает деятельность каждого процесса, чтобы дальше агрегировать статистику: например, сколько раз сканировалась таблица или индекс; когда был последний (авто)VACUUM, сколько раз он проходился по таблице. Всю эту информацию можно посмотреть через представления
pg_stat_*
.Джобин Аугустин (Jobin Augustine, Percona) объясняет, какие проблемы были в версиях до PostgreSQL 15 со stats collector. В любом случае этот механизм очень плохо масштабировался. Теперь этих проблем нет, так как и самого собирателя статистики нет. Не надо хранить временные файлы, статистика лежит в разделяемой памяти.
Соответственно, параметр
stats_temp_directory
исчез. Директория pg_stat_tmp
тоже не нужна, но её оставили, чтобы работали расширения вроде pg_stat_statements.Ещё некоторые релизы
FerretDB 0.5.4
FerretDB (бывшая MangoDB — через a!) создавалась как де-факто опенсорсная замена MongoDB. Это прокси, конвертирующая запросы протокола MongoDB 5.0+ в SQL, используя PostgreSQL как движок базы данных. Технический директор — Алексей Палажченко, организатор Golang Moscow. Самая свежая версия — 0.5.4. Технические детали по ссылке.
WAL-G 2.0.1
Новое по всем СУБД: поддержка arm(aarch64) сборки пакетов под Ubuntu 20.04.
PostgreSQL: поддержка PostgreSQL 15.
Postgres-зверушки
Здесь собралась уже целая коллекция биографий зверушек, помогавших разрабатывать Postgres. Недавние:
Холли (курица)
Эмба (пёс)
Milo (котик)
Статистически наибольший вклад в Postgres внесли собаки.
Конференции — взрослые и детские
Saint Highload++
Прошёл 22-23 сентября в СПб.
Там были довольно неожиданные доклады. Например, Могут ли данные управлять аппаратной конфигурацией дата-центра? Антон Катенев и Павел Лавренко представители РСК — суперкомпьютерной фирмы. Они рассказывали об универсальной платформе, позволяющей соединить управление аппаратной конфигурацией, создание систем хранения «по запросу», управления данными и задачами обработки. Применили её для построения платформы обработки данных с Большого Адронного Коллайдера (LHC) в Объединённый Институт Ядерных Исследований в г. Дубна.
Одновременно в другом зале Олег Бартунов и Иван Панченко (руководство Postgres Professional) читали доклад совсем неожиданный: Postgres от начала веков и до наших дней. От начала веков — не метафора. Действительно речь в начале шла о самых дальних предпосылках: чтобы правильно проследить, как человечество дошло до концепции СУБД вообще и Постгреса в частности, как развивался и какими технологиями питался Постгрес.
В программе конференции были даже Fail-секция и Fail-митап.
SmartData 2022
Фокус, конечно, на больших данных. Но и на ней есть доклады, имеющие отношения к Postgres. Прошла онлайн 17-18 октября и должна пройти в СПб (тоже с онлайновой частью) 29-го октября.
Можно обратить внимание на такие доклады:
Организация потоковой обработки данных для Big Data [с применением PostgreSQL] Евгений Ненахов, МТC Digital;
Интервью с Александром Ермаковым [Arenadata];
Data Vault на Greenplum c помощью DBT Марк Порошин, Smart Prediction Technologies.
Кстати, у нас есть в планах обзор по DBT — наши читатели интересуются.
Daycare for Children at PostgreSQL Conference Europe
На этой всеевропейской Postgres-конференции, что пройдёт в Берлине 25–28 октября, будет специальная программа для детей. Родители, пришедшие говорить или слушать, смогут доверить своих деток от 3 до 15 лет профессиональной организации, специализирующейся на присмотре за детьми — Märchenkinder (буквально: Сказочные Дети). Среди развлечений числится, например, раскрашивание лиц и ногтей.
На сегодня всё.
PaulIsh
Радует, что potgresql становится всё больше совместим как со стандартом (MERGE), так и с другими СУБД (например, в версии 14 добавили out параметры в процедурах).
Начали плотно заниматься переездом с MSSQL на Pg и сходу столкнулись с нереализованной фичей в Pg.
У нас аналитики привыкли писать простыни кода вида:
Т.е. в коде выполняется блок бизнес логики с вызовом процедур, селектом из таблиц, управляющими конструкциями и финальной выборкой из блока. И к сожалению это не переписать на функции БД по ряду причин.
Наиболее близкое, что нашли в PG - это блок DO, но относительно MS SQL он имеет несколько отсутствующих возможностей:
Нельзя передавать в блок DO параметры.
Нельзя в блоке DO делать выдачу результата. Только через курсоры или временные таблицы
Собственно вопрос в наличии планов по развитию анонимных блоков в PG как в базовой версии, так и в версиях Postgres Pro?
erogov
Про такие планы ничего не слышно. Параметры и возвращаемый результат - это все-таки про функции и процедуры. Не очень понятны причины, почему их не использовать.
PaulIsh
Организационные ограничения. Такие блоки кода лежат в файлах конфигурациях некоторых сервисов. Эти конфигурации документируются, версионируются, складываются в gitlab, раздаются клиентам.
Возможно сами сервисы могли бы по файлам конфигурациям создавать функции в БД, но полагаю, что это приведет к неконтролируемым проблемам, например, замусориванию, так как при удалении чего-то из файловой конфигурации не будет удаляться из БД, опять же изменения не отследить, нужно будет каждый раз при старте функции пересоздавать.
erogov
Разве что создавать функции в схеме pg_temp, чтобы они автоматически удалялись.
Но не знаю, насколько это удачно. Скорее всего все же стоит что-то поменять в подходе. Во всяком случае, на DO с параметрами рассчитывать не стоит.