Жизнь продолжается. А мы продолжаем знакомить вас с самыми интересными новостями PostgreSQL

Релизы


Есть ощущение, что поток релизов в промежутке длиной в месяц между этим и предыдущим выпуском Postgresso заметно истончился.

PgBouncer 1.14.0

В этой версии появилась поддержка сокетов Unix-domain на Windows — в ногу с PostgreSQL 13.
На сервер теперь можно войти, используя зашифрованные SCRAM-секреты, хранящиеся в userlist.txt или полученные в auth_query.
Появилась поддержка создания сокетов с помощью systemd.

Pgpool-II 4.1.2, 4.0.9, 3.7.14, 3.6.21 and 3.5.25

Минорные релизы. Ничего особо примечательного, исправление большого числа мелких багов. Скачивать сорсы и RPM можно отсюда.

SQLancer

Он же Synthesized Query Lancer. Эта интересная программка на Java предназначена для нахождения логических ошибок в СУБД (тема актуальная, см. статью Jepsen ниже). Она сначала создаёт базу, а затем генерит запросы, которые создают, модифицируют и убивают данные. Кроме того создаются индексы и представления.

При генерации запросов используются три подхода. Например, в первом —
Pivoted Query Synthesis (PQS) — выбирается запись и под неё генерятся запросы, которые заведомо должные вернуть эту запись. Отсутствие говорит об ошибке. Другой проверяет баги оптимизации Non-optimizing Reference Engine Construction (NoREC), третий — снова логические ошибки, но используя Ternary Logic Partitioning (TLP).

pgsodium 1.1.1

Это написанное Мишелем Пеллетье (Michel Pelletier) расширение (оно выложено на PGXN, нужна регистрация), которое адаптирует функции криптографической библиотеки libsodium к SQL. Автор признаётся, что черпал вдохновение из расширения pgcryptokey Брюса Момджана. Когда ключ загружен, новые ключи можно получить генерацией пар ключей детерминированными функциями, например crpypto_box_seed_new_keypair(). Загружать отсюда.

veil2, pgbitmap

vail2 — фреймворк для быстрого построения систем с RLS (Virtual Private Databases, VPD) дает возможность упростить проверку доступа, аутентификации пользователей — гитхаб, документация.

pgbitmap — любопытная штука, пока в альфа-стадии. Это расширение для работы с битовыми картами в PostgreSQL, с ними можно много что делать, например, вычитать друг из друга, смотреть пересечения, конвертировать в текстовые представления. Разработано оно было под задачи управления доступом для RLS (Virtual Private Databases, VPD). И то, и другое написано Марком Манро (Marc Munro).

Citus 9.3

В этой версии в основном развиваются и улучшаются возможности, которые уже были в 9.2, и которые работают на концепцию HTAP (hybrid transactional analytic processing), то есть на то, чтобы сделать базу пригодной и для транзакционных задач, и для аналитики (особенно для аналитики). Соответственно оптимизация шардинга и оконных функций в центре внимания.

Раньше поддерживались только запросы с вовлечением разных шардов в том случае, когда PARTITION BY относилось к столбцу, по которому таблица разбивалась на шарды — столбцу распределения. Теперь об этом можно не думать.

Выбор шардов (shard pruning) работает теперь более универсально: раньше с этим были проблемы при запросах с OR в предложениях WHERE, теперь со всеми булевыми логическими выражениями в WHERE выбираются только нужные шарды.

Выражения вида INSERT … SELECT работали в распределенных транзакциях и раньше, но только не с последовательностями. Теперь и с ними тоже.

В Citus можно создавать таблицы 3 типов: reference (словарные), distributed (распределенные)
и local («обычные» Postgres-таблицы). Были проблемы JOIN словарных таблиц с обычными, а теперь словарные живут на координаторе кластера, никаких проблем нет, и работают такие джойны быстрее.

И ещё: появилось адаптивное управление соединениями — для того, чтобы при многих параллельных запросах можно было обходиться без внешних пулеров (без PgBouncer).

wal2mongo v1.0.6

Китайская компания HighGo Software, о котором было и в Postgresso 21, с помощью этого плагина дает возможность устроить логическую репликацию от PostgreSQL в MongoDB. Это практично, если в PG накапливаются сырые данные, которые дальше анализируются в Mongo. Тестировали и собирали с PostgreSQL 12.3. Имеются сорсы и бинарники для CentOS6, 7, для Windows 7, 10, 2019.

Pitrery 3.1

Это набор bash-скриптов для PITR-бэкапа. В релизе несколько багфиксов. Качать отсюда.

psqlODBC 12.02.0000

В этом релизе некоторый набор не слишком принципиальных изменений и доработок: появление опции IgnoreTimeout, например.



Статьи



Multi-Master Replication Solutions for PostgreSQL
В этой статье от Percona рассматриваются
  • BDR (2ndQuadrant);
  • xDB (EnterpriseDB);
  • PostgreSQL XC/XC2 (NTT совместно с EnterpriseDB);
  • PostgreSQL XL (форк PostgreSQL-XC, сейчас поддерживается 2ndQuadrant);
  • Rubyrep (автор Арнт Леман — Arndt Lehmann);
  • Bucardo (авторы End Point Corporation).

Странно, что не видно в этой сводке multimaster в Postgres Pro Enterprise.

Jepsen: PostgreSQL 12.3
Аналитики компании Jepsen.io натравили на Postgres свою утилиту Elle, которая тестирует валидность заявленных уровней изоляции. И нашли баг. Никакой трагедии: они находили их в дюжине уважаемых СУБД; баг уже исправляют, и патч появится в следующем минорном релизе 12.4, намеченном на 13-е августа. Кайл Кингсбери (Kyle Kingsbury) пишет об этом в блоге своей компании. На самом деле уровень SERIALIZABLE в PostgreSQL это SSI (Serializable Snapshot Isolation), что, впрочем, было известно — как и про то, что REPEATABLE READ это Snapshot Isolation. Но это считалось достаточным приближением к соответствующим стандартным уровням ANSI SQL.

Elle выявила, что PEREATABLE READ в PostgreSQL слабее, чем в стандарте (но, как говорят в Jepsen, и само определение для этого уровня довольно двусмысленное — так что ладно) и что уровень SERIALIZABLE в PostgreSQL допускает аномалию G-2, а это уже не comme il faut. Это событие уже обсудили на Вторнике #ru.Postgres #23 0:01:57 (см. раздел Вебинары и митапы). Решили, что ситуация далека от экстремальной.

PostgreSQL Transparent Data Encryption

Cybertec просвещает постгресистов по теме TDE, благо их патч доступен и работает (разработками TDE занимаются сейчас многие: EDB, например).

TDE шифрует в 128-битный AES-CTR всё кроме данных расширения pg_stat_statements и метаданных транзакций. Шифрование поддерживается инструкциями процессора для ускорения ввода/вывода, оверхед на само шифрование на фоне ввода/вывода незаметен. TDE работает начиная с PostgreSQL 9.6.12 вплоть до 12.3.

Safety Systems Can Reduce Safety

В чём цель? — риторически заостряет Брюс Момджан — сделать систему безопасней, или добиться, чтобы она выглядела безопасной? Удовлетворить неким требованиям извне? Но даже в первом случае это удаётся не всегда, говорит Брюс, вспоминая Чернобыль. Системы безопасности усложняют систему и вносят сценарии краха, которые не были возможны без неё. Ответьте на 4 вопроса
  1. насколько серьёзно происшествие, которое система безопасности хочет предотвратить?
  2. насколько оно вероятно?
  3. насколько вероятен провал системы безопасности?
  4. как провал системы безопасности может сказаться на работе всей системы?

А теперь займитесь сложными вычислениями с этими неизвестными. Для СУБД такие компоненты как резервное копирование, логирование ошибок, репликация, пул соединений дадут разный вклад в перечисленные вопросы — что и разбирает в заметке Брюс.

When Does a Commit Happen?

В этой заметке Брюс копает вглубь механизма коммитов: они не укладываются в логику да/нет, а распадаются на 6 фаз. В результате падения процесса может, например, получиться так, что коммит уже будет сброшен на диск, но ещё не виден клиентам или уже будет реплицирован и виден запросам на репликах, но не виден запросам на мастере — простите: на primary. Брюс также рекомендует почитать этот тред Андрея Бородина из Яндекса.

10 Things Postgres Could Improve – Part 1, 2

В своём блоге PG-Пятнетцы (PG Phriday, ср. со Вторниками #ruPostgres) Шон Томас (Shaun Thomas, 2ndQuadrant) анонсировал 4 части сериала 10 вещей в Postgres, которые можно улучшить:
  1. проблемы с ID транзакций;
  2. неприятные сюрпризы репликации;
  3. MVCC и почему надо быть внимательным с хранением;
  4. функциональность ядра.

Уже вышли 2 первые из них.

В первой речь, конечно, о wraparound, недостаточности 32 бит на идентификатор (и двух миллиардов транзакций) и vacuum. Добавлю от себя, что пока только у Postgres Pro Enterprise есть 64-битные счетчики транзакций, но движения в этом направлении понемногу происходят и в PostgreSQL. Шон, однако, надеется, что проблему решат новые движки подключаемых хранилищ (pluggable storage). А пока что советует поиграться с секционированием, мониторить упавшие подготовленные транзакции, прилагает список рекомендаций.

Вторая часть, про репликацию, ярче: хотя бы названия главок завораживают: «прилив и отлив» (ebb and flow), «пить из пожарного шланга», «затыкая дыры в дамбе». Эту серию, пожалуй, не отнесешь к in depth, но Шон расставляет акценты и напоминает о том, что на грешной земле разработчикам есть, чем заняться.

Кстати, формат становится модным: в Postgresso 21 было о 7 вещах в PG, которые можно улучшить — автора из Cybertech Каарела Моппела — можно сравнить. К тому же и сам Шон ссылается на статью в смежном жанре: 10 вещей, которые я ненавижу в Postgres Рика Бронсона (Rick Bronson), работающего с петабайтными базами. Понятно, что такие вещи как vacuum не обойдет ни один автор этого жанра, другие же пункты пересекаются отнюдь не везде. Stay tuned, любители жанра.

EXPLAIN ANALYZE May Be Lying to You

Неужели действительно врёт? Альваро Эрнандес (Alvaro Hernandez) называет это (квантово-механическим) эффектом наблюдателя, и сам наблюдает увеличение в полтора раза времени запроса с EXPLAIN ANALYZE по сравнению с реальным запросом. Разгадка в обращении к системным часам — Альваро объясняет, что происходит в обоих случаях. Эта статья обсуждалась на #ru.Postgres #22.




Образование на дому


Сертификация

C 1 июля В Postgres Professional возобновится процесс сертификации PostgreSQL DBA. На данный момент свободны 10 временнЫх слотов для записи. Сертификация будет проводиться при полном соблюдении санитарно-эпидемиологических мер — маски, перчатки, дистанция.

Вебинары и митапы


Вторники #ruPostgres: #22, #23

Главный док Постгрес-вторников, где есть и новая ссылка для активного участия в Zoom, здесь.

На #23 начали с опроса DBA: есть ли у вас борода. 49.4% ответили Да. Поскольку гостем номера был Владимир Бородин (у Бородина как раз нет бороды), руководитель команды разработки DBaaS в Яндекс.Облаке, то много говорили об облачных решениях. Список затронутых (иногда совсем бегло) тем есть на подписи к видео, он огромен: тут и баги в MySQL, и о миграции многотерабайтных баз в облака, о шардинге в PG (относительно много), об Odyssey, pgbouncer, о multiprimary и о многом другом.

#22 был посвящен визуализации планов, о "вранье" EXPLAIN ANALYZE, о pgsentinel, datasentinel.io и о другом. Гвоздями программы были утилиты PASH Viewer (анализ wait events у активных сессий) и молодой plan-exporter (экспорт EXPLAIN-данных в инструменты визуализации прямо из psql).

Online @Databases Meetup #2

Митап в Mail.ru (точнее: Mail.ru Cloud Solutions & Tarantool) состоится 25 июля. Программа:
  • Как собрать гибридное облако с помощью Kubernetes, которое может заменить DBaaS. Пётр Зайцев, генеральный директор Percona;
  • от хозяев: Архитектура S3: 3 года эволюции Mail.ru Cloud Storage. Владимир Перепелица, архитектор платформы Mail.ru Cloud Solutions;
  • JSON[b] в Postgres: Пора великого объединения. Олег Бартунов, генеральный директор Postgres Professional;
  • Эволюция Postgres Pro за годы существования и стратегические планы по развитию. Иван Панченко, заместитель генерального директора Postgres Professional.


Теория & Практика миграции на PostgreSQL

Митап ФОРСа состоится 2-го июля. В программе:
  • Как перейти на PostgreSQL за 10 шагов. Иван Панченко, заместитель генерального директора Postgres Professional;
  • Переходим. Миграция на PostgreSQL: Ожидания и реальность. Алексей Береснев, ведущий преподаватель УКЦ ФОРС;
  • Практический опыт миграции на примере сервера мониторинга Zabbix на PostgreSQL. Олег Константинов, руководитель группы инженеров службы внедрения и сопровождения, ФОРС Центр разработки.;
  • Широкие возможности перехода на PostgreSQL: разработка приложений, инструмент миграции, кластер на OC «Эльбрус. Александр Любушкин, технический директор ФОРС Телеком.


Postgres Vision 2020

Должна пройти в онлайне 23-24 июня. Брюс Момджан с Марком Линстером (Marc Linster) расскажут о будущем PostgreSQL в многооблачном мире. Олегу Бартунову предстоит за 25 минут развернуть энциклопедию полнотекстового поиска.



Конференции


The PGCon 2020

26-29 мая прошла первая крупная конференция целиком в онлайне. В мирное время PGCon происходит в Оттаве. Пока отзывы от «прекрасно» до «ждал худшего». Большой минус в том, что отвлечься на рабочие и домашние дела намного легче, чем в офлайновой, поэтому исправно посещающих намеченные выступления заметно меньше. Многие рассчитывают просмотреть записи потом. Слайды части докладов выложены (в самых разных местах, но ссылки есть в программе), видео пока нет, но обещаны (кроме мастер-классов, которые только live).

От русскоязычного комьюнити выступили Илья Космодемьянский (слайды) и Николай Самохвалов (слайды) в мастер-классах, Александр Коротков рассказал о планах коммьюнити по шардингу, Андрей Бородин об индексах как расширениях, Олег Бартунов о JSONB-roadmap, Алексей Кондратов про Ptrack 2.0.

PG Day Russia

Перенесена на год — на 9 июля 2021.

FOSS4G 2020
Пройдёт в Калгари, Канада, 24-29 августа. Заявки принимаются.

PGDay Ukraine

Однодневная конференция в 2 потока должна состояться 5 сентября во Львове. Среди выступающих Магнус Хагандер (Magnus Hagander), Илья Космодемьянский, Деврим Гюндюз (Devrim Gunduz), Томас Вондра (Tomas Vondra), Олексий Васильев и Олексий Клюкин, Павло Голуб. Программа здесь.

pgDay Israel 2020
Намечена на 10-е сентября в Тель-Авиве. Выступят в том числе Иван Панченко, Павло Голуб, Дорофей Пролесковский, Андрей Бородин.

PGDay Austria
В летней резиденцим Габсбургов — замке Шёнбрунн, Вена 18 сентября должна пройти конференция PGDay Austria.





Подписывайтесь на канал postgresso!

Идеи и пожелания присылайте на почту: news_channel@postgrespro.ru
Предыдущие выпуски: #21, #20, #19, #18, #17, #16, #15, #14, #13, #12, #11 (спец), #10, #9, #8, #7, #6, #5, #4, #3, #2, #1