Postgresso 27



    Ну и год выдался! Подходит к концу. 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, одновременно с патчем подобной направленности, предложенным Альваро Эррера (Álvaro 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
    Postgres Professional
    Разработчик СУБД Postgres Pro

    Comments 3

      +1
      > Как всегда активен Депеш, он же Хуберт Любашевски (Hubert Lubaczewski). Здесь он пишет о патче Александра Короткова.

      Не совсем так. В данном патче я выступил в качестве коммиттера и соавтора, основной автор – Paul Jungwirth.
        0
        Еще в копилку постгрессменам:

        — несмотря на всяческую рекомендацию при «автоматическом» партицировании откладывать как можно больше вещей на как можно более глубокие уровни партиций (например, правила, в которые превращаются ключи ваших партиций, по сути, могут в некоторых случаях выступать, как минимум, в роли, аналогичной partial index), движок будет бить вас за это по рукам, например, в INSERT INTO… ON CONFLICT (index defining columns) DO UPDATE: bug 16714
        — несмотря на то, что документация не оставляет шансов думать иначе, CREATE… IF NOT EXISTS не избавит вас от `ERROR: relation… already exists` в некоторых случаях (например, когда несколько сессий выполняют этот запрос параллельно и одновременно); bug 16763
        — оба вышеперечисленных не являются ошибками по мнению Tom Lane
          0
          > Каарел Моппел (Kaarel Moppel, Cybertec) предлагает неожиданный и даже контринтуитивный способ сглаживания пиков: вместо UPDATE данных только INSERT на время пиков нагрузки, чтобы потом, в спокойные часы разобраться с данными, вставленными в экстремальной ситуации. Выигрыш в скорости INSERT vs UPDATE на тестовых данных Каарела (100 млн записей) получился раза в 3.

          Вы бы выражались как-то поаккуратнее, а то если для команды Postgres Pro это неожиданный и контринтуитивный способ, то есть очень большой вопрос по вашей интуиции и экспертизе.

          Only users with full accounts can post comments. Log in, please.