Ну и год выдался! Подходит к концу. 21-му надо изрядно постараться, чтобы стать хуже. Но он — надеемся — стараться не будет. А жизнь продолжается. И мы продолжаем знакомить вас с самыми интересными новостями PostgreSQL.
Но сначала поделимся воспоминаниями: как проводил время на хабре отдел образования компании Postgres Professional:
- Начнём с того, что под рукой — с Postgresso. Из фонового и иногда побочного занятия Postgresso сместился к центру, стал новостным каналом со стабильной периодичностью примерно месяц. Мы отказались от плоского формата — большой простыни с большим списком релизов и статей по 3-5 строчек на каждую. В 21-м продолжим экспериментировать, но от периодичности не откажемся.
- Наш коллективный труд PostgreSQL 13. Чертова дюжина. Первый (задержка в 37 минут после заморозки) и самый полный обзор возможностей 13 версии. Далее последовали обзоры коммитфестов: Июльский, Сентябрьский и Ноябрьский Павла Лузанова. Эта практика 20-го года будет продолжена и в 21-м. Мы часто сами на них ссылаемся — а как не сослаться? Они действительно информативны.
- «Жизнь» в PostgreSQL и в Postgresso 26 подборка других реализаций Жизни — памяти Джона Хортона Конвея, умершего от COVID-19.
- Автор статьи Серверное программирование на человеческом языке, очень понравившейся хабр-читателям — Иван Панченко. Мы помогали Ивану в подготовке статьи.
- Сотрудник нашего отдела образования Павел Толмачёв написал для хабра статью о модуле aqo. Тема непростая, а тема — использование ИИ для оптимизации запросов — актуальна, а станет ещё актуальней.
- К тому же бОльшая часть статей была переведена на английский (спасибо Елене Индрупской за титанический труд). Это серии очень глубоких погружений Егора Рогова Locks in PostgreSQL (ru), WAL in PostgreSQL (ru), MVCC in PostgreSQL (ru) и Indexes in PostgreSQL (ru). Кроме того переведён ещё десяток статей, наиболее интересных для англоязычной аудитории. Некоторые из этих статей попадали в англоязычные обзоры самых интересный статей.
Релизы
Вышла Postgres Pro Standard 13
18 декабря 2020 года компания Postgres Professional выпустила новый релиз Postgres Pro Standard 13.1.1. Это первый из тринадцатых релизов Postgres Pro.
Среди новых возможностей:
Новое расширение pgpro_pwr (или PWR, читается как power). Это расширение позволяет получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных. Оно умеет использовать данные расширения pgpro_stats, предназначенного для сбора статистики выполнения SQL-операторов и подсчёта статистики событий ожидания. pgpro_stats обновлено. В январе мы опубликуем на хабре отдельную статью о PWR.
Появилась поддержка операционной системы ОСнова 2.0. Также исправлены ошибки в PostgreSQL 13.1. Среди этих исправлений – устранение уязвимостей CVE-2020-25694, CVE-2020-25695 и CVE-2020-25696 (6 патчей сотрудников Postgres Professional).
Postgres Operator v1.6.0
Релиз поддерживает последнюю PostgreSQL 13 и новый образ Spilo 13 (спило — слон по-грузински), в котором имеется Patroni 2.0 (но последняя версия Patroni на сегодня 2.0.1). Апгрейд ещё не автоматический, но сильно упростился. Проще стало развертывание pgBouncer на репликах. Подробности в чейнджлоге и в доке.
Pgpool-II 4.2.0
Изменения:
- в этом релизе теперь во всех образцах файла
pgpool.conf
путь к сокетам/var/run/postgresql
; - Используется единственный сегмент разделяемой памяти для всех разделяемых переменных родительского процесса pgpool;
- при старте убиваются существовавшие до того файлы сокетов
watchdog
Загрузить можно отсюда.
pg_timetable: Advanced PostgreSQL Scheduling
Это шедулер, написанный на Go разработчиками Cybertec и работающий как отдельное приложение (для сравнения: pgpro_scheduler выполнен как расширение). Он умеет выполнять задания, состоящие из нескольких разнородных действий, например:
- начать транзакцию;
- записать в лог;
- загрузить файл;
- импортировать файл;
- запустить агрегирование;
- закоммитить транзакцию.
pg_timetable на гитхабе.
Новый начальник Коммитфеста
Масахико Савада (Masahiko Sawada, NTT) стал распорядителем нового Коммитфеста (предыдущий координировала Анастасия Лубенникова)
Статьи
PostgreSQL 14: Часть 3 или «ноябрьское затишье» (Коммитфест 2020-11)
Это изменения после ноябрьского коммитфеста, последнего в 2020. Павел Лузанов сам предлагает обратить особое внимание на вопросы:
- Не пора ли увеличивать wal_buffers?
- Можно ли перегружать хранимые подпрограммы по OUT-параметрам?
- По умолчанию pg_stat_statements собирает данные о 5000 запросов. Как понять много это или мало?
- Что будет, если в операционной системе обновится библиотека libc?
Текст огромный, так как список изменений полный. Продолжение следует после январского коммитфеста.
Обзор операторов PostgreSQL для Kubernetes: Часть 1: наш выбор и опыт и Часть 2: дополнения и итоговое сравнение"
В первой части Николай Богданов в блоге компании Флант, советовал начать с доклада на Highload++ своего коллеги Дмитрия Столярова, где тот знакомит с общими принципами работы баз данных в Kubernetes (K8s). Николай же формулирует 6 основных требований со стороны K8s и рассматривает операторы:
- Stolon. Этот довольно популярный отказоустойчивый кластер интегрирован в K8s. Но Stolon не подошёл, так как первое же («деплой из Git и с Custom Resources») из тех кубернетовских требований не удовлетворено (нет Custom).
- Crunchy Data PostgreSQL Operator — разработка нашего старого postgres-знакомого CrunchyData (автор называет молодым стартапом) богат фичами, но он оттолкнул несоответствием принятым в K8s стандартным возможностям работы с ресурсами.
- Zalando Postgres Operator понравился больше всего. И возможностей много, и развивается быстро, и соответствует look & feel в глазах истых кубернетчиков.
Дальше Николай начинает работать с Crunchy Data PostgreSQL Operator, делится впечатлениям. А они не столько радужны, как хотелось. Список проблем и их решений, а также план миграции прилагаются.
Во второй части обзора, вышедшей 13-го ноября, добавились ещё два K8s-оператора:
KubeDB и
StackGres.
В результате появилась сводная таблица — матрица имеющихся возможностей этих 5 операторов. Но сердце автора уже прикипело к Zalando, он объявлен лучшим вариантом для тру кубернетчика.
What are table access methods, and what is their importance to PostgreSQL?
Статья Панкаджа Капура (Pankaj Kapoor, Fujitsu) — этакое обозрение уже не такой уж короткой (4 года) истории попыток интегрировать вертикальное хранение в PostgreSQL. Автор наблюдал этот процесс не как посторонний: Fujitsu, где он работает, предлагала сообществу свой Vertical Clustered Index в 2016, одновременно с патчем подобной направленности, предложенным Альваро Эррера (Alvaro Herrera, 2ndQuadrant, теперь EDB). Со стороны Fujitsu внедрением Vertical Clustered Index занимался Харибабу Коми (Haribabu Komi). Но сообщество пошло другим путём: сосредоточило усилия на универсальном решении — на API методов доступа к таблицам, по образцу методов доступа к индексам.
Сейчас, на конец 2019-го через слой методов доступа идёт интеграция с таблицами альтернативного типа хранения, zheap, например. Но пока только с доступом на базе кортежей, то есть до интеграции вертикального хранилища (реальный претендент — Zedstore) ещё далеко.
Автор предлагает заодно ознакомиться со своей презентацией на PGCon2019.
Напомним и о vops — интересном расширении Postgres Professional, поддерживающем векторные операции. Данные там группируются по значениям столбцов и хранятся в виде «плиток» («паркета»).
Insert-Only Data Modelling To Smooth Peaks On Slow Disks
Каарел Моппел (Kaarel Moppel, Cybertec) предлагает неожиданный и даже контринтуитивный способ сглаживания пиков: вместо UPDATE данных только INSERT на время пиков нагрузки, чтобы потом, в спокойные часы разобраться с данными, вставленными в экстремальной ситуации. Выигрыш в скорости INSERT vs UPDATE на тестовых данных Каарела (100 млн записей) получился раза в 3. Конечно, этот способ подходит отнюдь не во всех случаях, но Каарел говорит об опыте конкретной проблемы заказчика, у которого не было возможности или желания апгрейдить железо из-за пиков, в то время, как в обычных условиях система справлялась.
10 Things I Hate About PostgreSQL
Под Новый Год лучше бы уж не о ненависти, а о любви. Ну да ладно. Рик Бронсон (Rick Branson), работавший в том числе с петабайтного масштаба проектами, решил подытожить 2020-й десяткой самых ненавистных ему особенностей PostgreSQL (некоторые наши спойлеры курсивом):
#1: Wraparound, чреватый катастрофой
[«скорее всего когда-то в будущем XID-ы станут 64-разрядными целыми» (то есть как уже давно в Postgres Pro Enterprise)];
#2: При переключении кластера (failover) могут потеряться данные;
#3: Неэффективная репликация, распространяющая испорченные данные;
#4: Частая сборка мусора в СУБД типа MVCC проходит болезненно
[Вся надежда Рика на будущий zheap];
#5: Принцип «по процессу на соединение» мешает масштабируемости
[Рик рассказывает, как использовал 2 слоя pgbouncer-ов и как доходило в общей сложности до миллиона процессов; а также скучает про тред-на-соединение в MySQL];
#6: Индекс по Primary Key очень прожорлив по части ресурсов
[Рик предлагает использовать индекс-таблицы];
#7: Для апгрейда мажорных версий может потребоваться остановка СУБД
[Из-за несовместимости бинарных форматов хранения файлов на диске могут потребоваться часы простоя. Это при потоковой репликации. Переход на логическую может решить проблему в будущем];
#8: Неуклюжая настройка репликации;
#9: Странная догма «Никаких-подсказок-планировщику»;
#10: Отсутствие компрессии на уровне блоков.
Но каждый из пунктов не так уж просто устроен: там масса оговорок и уточнений (учитывающих и реплики комментаторов). Ну а дальше автор поясняет, конечно, что никакой ненависти к PostgreSQL у него нет, просто нет идеальных СУБД, и бурно выражает уверенность в том, что великолепная команда разработчиков PostgreSQL все эти вопросы благополучно разрешит.
Waiting for PostgreSQL 14 – Multirange datatypes
Как всегда активен Депеш, он же Хуберт Любашевски (Hubert Lubaczewski). Здесь он пишет о патче Александра Короткова. Как можно догадаться, многодиапазонные типы собираются из непересекающихся диапазонов. Как и диапазоны, они строятся на базе
integer, bigintint, numeric, timestamp without time zone, timestamp with time zone, date
.Депеш создает многодиапазонные данные и пробует их на зуб: смотрит, какие индексы с ними уже можно создавать.
btree
уже точно можно, так что вот такой запрос будет ускоряться:SELECT * FROM test
WHERE ranges = '{[77.7909859996235,177.7909859996235],(1035.84122266822,1135.84122266822],(1000099.99954803,1000199.99954803]}';
How to install and configure PostgreSQL Debian/Ubuntu – for developer use – part 1
А здесь Депеш решил расписать шаги по установке PostgreSQL-13, настройке пользователей, редактировании
pg_hba.conf
и запуске PgAdmin под произвольным пользователем. Это азбука, но какие-то нюансы могут и пригодиться. Содержание следующих частей пока не анонсировано. На всякий случай напоминаем о существовании Малютки.Waiting for PostgreSQL 14 – pg_stat_statements: Track time at which all statistics were last reset.
Идёт постоянное усовершенствование pg_stat_statements. В 1-м и 3-м обзорах коммитфестов от Павла Лузанова уже было о некоторых коммитах. Депеш пишет о важном коммите Фуджи Масао (Fujii Masao): времени последнего ресета статистики. Информацию в
pg_stat_statements
время от времени очищают приложения и отдельные запросы:SELECT pg_stat_statements_reset();
Теперь можно спросить у
pg_stat_statements
о времени последней чистки:SELECT stats_reset FROM pg_stat_statements_info;
dealloc | stats_reset
---------+-------------------------------
0 | 2020-12-20 12:06:02.099943+01
Postgres, PL/Python and SciPy/NumPy for Processing Images
Это продолжение статьи о сохранении картинок через Django-приложение в тип PostgreSQL bytea. На этот раз картинки ещё и обрабатывают фильтром.
Is Update The Same As Delete + Insert In PostgreSQL
Ответ: почти. И дальше Лоренц Альбе (Laurenz Albe) из Cybertec исследует это «почти». Речь о блокировках при стандартном уровне изоляции: READ COMMITTED.
Session 1 Session 2
BEGIN;
UPDATE uptest SET id = 2
WHERE val = 42;
SELECT id FROM uptest
WHERE val = 42
FOR UPDATE; -- hangs
COMMIT;
-- one row is returned
А в другой раз:
Session 1 Session 2
BEGIN;
DELETE FROM uptest
WHERE id = 1;
INSERT INTO uptest VALUES (2, 42);
SELECT id FROM uptest
WHERE val = 42
FOR UPDATE; -- hangs
COMMIT;
-- no row is returned
— в первый раз возвращается 1 запись, во втором 0.
Дальше Лоренц исследует эту ситуацию, используя расширение pageinspect, да ещё и рассказывает о разнице поведения атрибутов
infomask
и infomask2
в этих двух случаях.Конференции
Неопределённость сохраняется. Кто-то уже объявил о переформатировании в он-лайн.
PGCon 2021
В 2021-м пройдёт 28-го мая в сокращенном формате. От конференции осталась только Unconference, которая уместится в zoom. Записаться можно здесь.
Nordic PGDay 2021
Запланирована на 18 марта в Хельсинки. Об он-лайне пока ни слова. Год назад эта конференция была отменена из-за эпидемии.
Облака
Want more PostgreSQL? You just might like Babelfish
Этот проект откровенно ориентирован на тех, кто хочет беспроблемно мигрировать с MS SQL Server на PostgreSQL. Утверждается, что Bablefish это PostgreSQL, совместимый с SQL Server настолько, что приложения, под него написанные (в том числе с T-SQL и протоколом TDS), будут сразу работать.
Новости юриспруденции
Trademark Policy изменилась
Изменения касаются и Slonik-а — то есть милой сердцам постгресистов картинки, и торговых марок.
Кто ты, бек-эндер?
Может ты бэкендер? Этот в высшей степени непростой вопрос разбирается в пространном исследовании Острые орфографические боли по всей длине слова и как от них избавиться на сайте ГЗОМ. Любители отгадывать зажмурьтесь: дальше ответы-спойлеры.
Сегодня нормативно:
Бэк-энд, бэк-энд-разработчик. В профессиональных текстах — back-end-разработчик.
Соответствуют русской орфографии:
Бэкендер, бэк-эндовый.
Лет через семь могут возобладать:
Бэкенд, бэкендовый.
Предыдущие выпуски:
#26, #25, #24, #23, #22, #21, #20, #19, #18, #17, #16, #15, #14, #13, #12, #11 (спец), #10, #9, #8, #7, #6, #5, #4, #3, #2, #1
smagen
> Как всегда активен Депеш, он же Хуберт Любашевски (Hubert Lubaczewski). Здесь он пишет о патче Александра Короткова.
Не совсем так. В данном патче я выступил в качестве коммиттера и соавтора, основной автор – Paul Jungwirth.