Postgresso №6 (55)

d1003ac5de11156f84ea14d167b904f8.jpg

PostgreSQL 16 Beta 2

Изменения по сравнению с 1-й бетой коснулись прежде всего правил сортировки (collation): провайдер по умолчанию, которого выбирает initdb, теперь сноваlibc. В 1-й бете решили сделать так: если доступна ICU, то выбирается ICU. Откатили. Временно или нет — не знаю. То же при сборке из исходников.

Для интересующихся подробностями: вот само сообщение о релизе Beta 2, вот здесь ещё некоторые детали и ссылки на обсуждения. А вот здесь Питер Айзентраут (Peter Eisentraut) разъясняет работу с правилами сортировки:

Полный список новых и измененных старых возможностей 16-й версии в release notes. Скачать можно здесь.

Обожаемый и желанный

Приятна для Postgres новая статистика Stack Overflow. Синие точки это желанность (desired), красные — обожаемость (admirable). Postgres обогнал всех в обеих номинациях. Да ещё как обогнал. Более того: Postgres отныне и самая популярная база — отодвинула MySQL.

Но не только это интересно. Стремительно ворвалась СУБД Datomic: по обожаемости она чуть не догнала Postgres — 70.49% vs. 71.32%. Конечно, она облачная и распределённая, с ACID. В ней реализован логический язык запросов Datalog.

Stack Overflow Developer Survey 2023

Игры, задачи и задачи игр

Задачи второго этапа олимпиады «IT-Планеты» по PostgreSQL

В олимпиаде этого года было тоже 3 этапа. Когда-то спонсором был Oracle, а теперь этот раздел олимпиады официально назывался СУБД PostgreSQL — это пункт 17 в итогах на странице Финал Международной олимпиады в сфере ИКТ «IT-Планета 2023». Организовывала это непростое мероприятие на этот раз Дарья Рисухина (тоже Postgres Professional).

Об олимпиаде времён Oracle рассказывал bzq aka Евгений Бредня, возглавляющий сейчас техподдержку Postgres Professional, а тогда (2016–2017) он ещё готовил вопросы как сотрудник AT Consulting. Вот части I и II. У Евгения на хабре интересные статьи — и о причудливых задачках, и о техподдержке. Рекомендую.

В статье Егор Рогов (отдел образования Postgres Professional) рассказывает о втором этапе недавней олимпиады (задачи для первого готовил не он, а Евгений Моргунов, автор PostgreSQL. Основы языка SQL). А о третьем, финальном (IT-Планета проводит их в Сочи) ещё расскажет. Там будет про почтенную игру Го.

В статье Егор так формулирует серьёзность и важность игр:

Решение на SQL «ненормальных», «атипичных» задач раздвигает границы сознания. После этого и стандартные повседневные задачи будут решаться легче — снимается барьер переключения парадигм.

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

В этом разделе мы расскажем ещё о некоторых SQL-играх и -игрушках. Ясно, что сочиняют их не (только) заскучавшие программеры. У многих сочинителей игр выходят книжки. Ещё разок напомним и о книжке Егора PostgreSQL 15 изнутри.

UPD: Уже хотел нажать кнопку Опубликовать, как подоспело продолжение:

Задачи третьего этапа олимпиады «IT-Планеты» по PostgreSQL

Для этого финального этапа Егор приготовил семь задач. Формально их можно было делать в любом порядке, но построены они были так, что решение предыдущей немного приближало к решению следующей. Все они строились вокруг игры Го и таких её сущностей ка глаза, дыхания и атари.

Интересный процесс тестирования придумал коллега Егора Илья Баштанов. Реализовал он её на основе Database Lab Engine — разработке Postgres.ai. Она поддерживает пул тонких клонов PostgreSQL и запускает на них весь набор тестов в параллель.

Участники шокировали Егора:

Я даже в шутку не предполагал, что за отведенное время можно решить все задачи. У меня-то самого на них ушло гораздо больше времени. Я сказал на закрытии олимпиады и повторю еще раз: ребята-финалисты, я вами восхищаюсь! И не только теми, кто попал в верхние строчки турнирной таблицы, но и всеми, кто не сдавался до последнего.

Все задачи успела решить Дарья Рябова из Москвы, а почти все — Ян Сенин из Минска и Олег Крюков из Тулы.

Решение задачи 1a

Решение задачи 1a

Почти тетрис

Fun with PostgreSQL Puzzles: Moving Objects with Arrays, Sequences, and Aggregates

Это тоже статья о состязаниях — о решении задачки на Advent of Code 2022. Advent of Code — этакий адвентистский календарь кодировщиков, который придумал Эрик Вастль (Eric Wastl). Задачки он задаёт каждый год с 1-го декабря по Рождество — по 25-е декабря по одной в день. Решать их можно на любом языке программирования. За пандемию число участников доросло до 180К, а число зарегистрировавшихся — до 1М. Эрик говорит:

Люди используют эти задачки для подготовки к интервью, обучения в компаниях, для университетских курсов, для решения практических проблем, для состязаний по программированию на время. Или просто чтобы испытать друг друга.

Грег Сабино Муллани (Greg Sabino Mullane, Crunchy Data) решал при помощи SQL задачку Pyroclastic Flow. Но не одним запросом, как на олимпиадах Планеты. В задании слонам надо выбраться из пещеры, вход в которую заваливают камни в форме разных тетрисовских фигур. Грег размахнулся: он использует file_fdw,  jsonb_array_elements_text (), unlogged tables и unlogged sequences, и многое другое — у него по этим тема имеются собственные статьи.

Морской бой

Австралиец craigd предлагает вариант с 7 таблицами, при этом однопользовательский. Он использует тип GEOMETRY и пространственные функции SQL Server. Есть, разумеется, и импортоземещённый бой (на PostgreSQL, соответственно): Владимир Огненнолунный (@firemoon) из Selectel обнародовал на хабре и др. ресурсах свой Морской бой в PostgreSQL. Он играет не сам с соббой: новые таблицы и новые данные в существующих таблицах не изменятся для второго игрока до тех пор, пока транзакция не будет завершена.

Но это не то, чтобы SQL-battleships. Там используется процедурный язык — PL/pgSQL. Игрушка уложена в докер.

Game of Life

Бьёрн Эдстрём (Björn Edström) запрограммировал знаменитую Жизньвеликого Джона Конвея. Он потянул спину и в свой уикэнд не смог заниматься активным отдыхом, поэтому занялся Жизнью. Сам он оценивает своё детище так:

Эффективно? Нет. Красиво? Нет. Работает? Да!

Причём работает это на Postgres as is, а на других СУБД он не проверял. Он отнюдь не единственный сочинитель Жизни на SQL. Например, Кит Габриельски (Keith Gabryelski) рассказывает о своей версии Conway’s Game of Life written in SQL. А Томаш Вегржановский (Tomasz Wegrzanowski) даже попытался перенести свою версию на MongoDB, но пришёл к выводу, что без внешних процедурных языков там не обойтись.

У нас в стране этим тоже балуются, и даже не балуются, а обучают на этом студентов. Юдинцев Вадим Вячеславович, доцент кафедры теоретической механики и кафедры математических методов в экономике Самарского университета в Игра Жизнь на SQL говорит, что запрограммировал эту игру в процессе подготовки материалов для очередной лекции. Он использует процедуру.

Наконец, сам Егор Рогов, который придумывал те самые задачки к той самой олимпиаде, написал года 3 назад статью «Жизнь» на PostgreSQL. Он там признаётся:

А где же удовольствие, где же фан? Для меня один из источников вдохновения — сравнение процедурных решений с декларативными.

У него игра запускается одним SQL-оператором, но использующим CTE (общие табличные выражения, они же WITH-запросы). Фигурки задаются табличками, а чтобы картина менялась каждую секунду, psql говорит: \watch 1.

Игры для интервью

Ник Сингх (Nick Singh) — автор бестселлера Ace the Data Science Interview: 201 Real Interview Questions Asked By FAANG, Tech Startups, & Wall Street (в соавторстве с Кевином Хуо — Kevin Huo). На своём Лемуре Данных он приводит пример реальной задачки на интервью в Amazon. И вот этот серьёзный мужчина предлагает SQL-игрушки для обучения, а то так зубрить скучно. Вот его вклад в SQL-развлечения:

4 SQL Games That Make Learning SQL FUN!

Лингвистические SQL-игры

Федерико Рацоли (Federico Razzoli) в своём блоге FALSE IS NOT NULL предлагает SQL Games, хорошо известные у нас: анаграммы (ну это не игра, конечно), «быки и коровы», «виселица (hangman)». Лежат они здесь.

PS. Я думаю, тема эта многим интересна, можно сделать так: пишите в комментарии о других найденных SQL-играх. Если будет солидное их количество, можно собрать их здесь же в список внизу статьи. Или даже в отдельную статью, если будет (вдруг) совсем много.

А теперь без игр:

Образование

Курс DBA2–13 в видеоформате

На сайте Postgres Professional опубликованы видеозаписи DBA2 — курса по администрированию PostgreSQL 13.

Программа курса предполагает получение таких навыков:

  • настройка конфигурационных параметров, исходя из понимания внутренней организации сервера;

  • мониторинг сервера с использованием обратной связи для итеративной настройки параметров;

  • настройка, связанная с локализацией;

  • управление расширениями, процедура обновления сервера.

SQL Window Functions Explained

Автор книги — Антон Жиянов (Anton Zhiyanov). Его любовь — SQLite, но он пишет, что книга и постгрессистам подойдёт.

Ещё Антон советует послушать 2-часовой подкаст Подлодки, посвященный SQL, даёт таймлайн, в котором, например, на 1:27:47 такое:  Безопасность. Авторизация и права. Инъекции и динамический SQL. Шифрование. Идентификаторы. Выстрел в ногу.

Антон предлагает набор полезных ссылок:

pgpro_pwr, pgAdmin, Postgres Pro

Недавно стартовала серия обучающих видео — Используем Postgres Pro. Пока, на 5-е июля, в ней 4 ролика. Имеется Как установить инструмент диагностики pgpro_pwr и продолжение — Как сконфигурировать инструмент диагностики pgpro_pwr. Два оставшихся — это Как установить СУБД Postgres Pro (Standard и Enterprise) и — несколько неожиданно — Как установить и использовать программу pgAdmin. Рассказывают известные в мире Oracle, а теперь и Postgres: Борис Пищик, Андрей Забелин и Марк Ривкин.

Летняя школа в Новосибирске

Postgres Professional совместно с НГУ организовали Летнюю школу в Новосибирске на базе Новосибирского государственного университета. Школа началась с 3 июля и будет продолжаться по 11 августа. За 6 недель участники под руководством экспертов компании научатся решать задачи, связанные с СУБД PostgreSQL, разработают собственные проекты и представят их на итоговой конференции. А те, кто успешно защитят итоговые проекты, получат стипендию и сертификат, а самые лучшие — приглашение на оплачиваемую практику в лабораторию Postgres Pro в течение нового учебного года. Старт образовательной программы Postgres Professional приурочен к открытию нового офиса компании в Новосибирске, где и будет проходить обучение.

PostgreSQL 16 New Features With Examples (Beta 1)

Пусть этот огромный PDF (97 стр.) будет в разделе Образование. Hewlett Packard Enterprise решила выложить этот солидный труд уже после 1-й беты. До этого PDF в таком жанре они выкладывали после выхода общедоступной (GA — General Availability) версии PostgreSQL 14. Или это всего лишь случайно замеченные верхушки их айсбергов.

UPD: Коллега Павел Лузанов уточняет, что это японское отделение HPE, и что они ежегодно выкладывает этот документ именно после первой беты, буквально спустя неделю после выхода. Возможно, после выхода официальной версии они его подправляют с учетом изменений.

Собрать бы тогда ссылки на них в одном месте. У меня сразу не получилось.

Бояться или работать?

Стоит ли бояться исключения россиян из мирового Open Source-сообщества

Это колонка на РБК, поэтому изложена проблема и для неспециалистов: просто и понятно. Но это не попса, для интересующихся темой там немало интересных и не слишком широко известных подробностей о вкладе российских разработчиков в опенсорс, о конфликтах (пока немногочисленных) с сообществом. Иван Панченко (замгендир Postgres Professional) пишет:

Важно смотреть на ситуацию трезво и отделять недружественные выпады отдельных разработчиков от официальной позиции сообществ. А официальная позиция остается неизменной и вселяет сдержанный оптимизм.

А как эту проблему решать? Позиция Ивана такая:

Именно наш вклад в международные проекты является лучшей гарантией продолжения международного сотрудничества. Чем больше мировая значимость наших результатов — тем надежнее наше положение в этих проектах.

Векторы

Вот статья Джонатана Каца (Jonathan Katz, сейчас Amazon RDS, раньше Crunchy Data), которая ставит вопросы о хранении векторов и операций с ними на принципиально новый уровень:

Vectors are the new JSON in PostgreSQL

В векторах самих по себе мало нового. Хранить векторы с очень большим числом измерений Postgres умеет давно, но с операциями над ними дело плохо; операции над типом cube работают нормально, но сам тип ограничивается 100 измерениями. Кому могло прийти раньше в голову, что 100 — это мало? Но теперь, с гигантскими векторами для машинного обучения это не мало, это очень мало.

Появилось расширение pgvector. Но и оно не решает всех проблем. Джонатан об этом рассказал в презентации Vectors are the new JSON. Там говорится, например, об улучшении параллелизма в pgvector, поддержке индексов для векторов с более, чем 2000 измерениями, о том, как сбросить такие вычисления на аппаратные ускорители. И делает оптимистичный вывод: некоторые из этих вещей не так уж трудно осуществить, нужна просто работа сообщества в этом направлении.

Тема векторов определённо интересует сообщество. На 5-е июля это была самая популярная тема на Hacker News.

Из новостей: Generally available: Pgvector extension on Azure Cosmos DB for PostgreSQL.

Письма <-> форумы <-> статьи

Треды против процессов

Новый виток старой дискуссии. Джонатан Корбет (а может Корбэ — Jonathan Corbet) решил обобщить дискуссию в рассылке.

В июне Хейки Линнакангас (Heikki Linnakangas, теперь мы его знаем как сооснователя Neon) предложил начинать переделку всей модели Postgres с процессов на потоки (треды):

Я обсуждал этот вопрос на конференции PGCon и у меня впечатление, что сейчас сложился мощный консенсус, более серьёзный, чем до этого. Проблем много, но, что это в принципе надо делать, возражений я не слышал. Поэтому сейчас озвучиваю этот консенсус. Высказывайтесь.

Там же он предложил краткий перечень задач. Понятно, что за один релиз не перейти на треды. Андрес Фройнд (Andres Freund) поддержал:

Мы начали упираться в целый ряд ограничений процессной модели, особенно на больших машинах.

«За» высказался и Роберт Хаас (Robert Haas, EDB):

PostgreSQL плохо масштабируется на больших системах, в основном из-за потребления ресурсов этими процессами. Такая проблема не у всех СУБД, и Postgres не изменить в этом отношении без кардинальных архитектурных изменений. Для этого даже перехода с процессов на треды будет недостаточно. Но это подтолкнуло бы к другим изменениям.

Не смотря на поддержку таких авторитетных людей, заявление Хейкки не подтвердилось. Достаточно ответа Тома Лейна (Tom Lane, Crunchy Data), остающегося самым продуктивным разработчиком Postgres, чтобы констатировать: мощного консенсуса нет:

Я думаю, что это будет катастрофа. Огромное количество кода будет в результате поломано.

С самого начала этой дискуссии вспоминали, что в 2017-м Константин Книжник (тогда в Postgres Professional, сейчас в Neon) экспериментировал с потоками. Сам он сказал, что это оказалось проще, чем он думал. Но с тех пор он не продолжал этим заниматься.

Автор заканчивает статью так: цельтесь в звёзды, попадёте на Луну. Если цели нет, то и останетесь в Нигде.

Для LWN.net Джонатан написал ещё одну (как минимум) статью в том же жанре: PostgreSQL’s fsync () surprise. Тоже с большими и многими ветками комментариев. Она написана ещё в 2017-м.

UUID

Антс Ааасма (Ants Aasma, Cybertec) написал статью на эту интересную тему:

Unexpected downsides of UUID keys in PostgreSQL

Там много тонких моментов. Универсально-уникальные идентификаторы (вот рабочая группа, этим занимающаяся) решают многие проблемы, они удобны и надёжны. Но в некоторых ситуациях они работают против нас. Например: из-за того, что теряется корреляция между порядком идентификаторов и порядком вставок, может получиться, что надо держать в кэше весь индекс целиком, а не несколько недавно обновлённых страниц — как в случае обычных последовательных идентификаторов.

Плюсы и минусы UUID продуктивно обсуждались на Ycombinator, а Николай Самохвалов посвятил этой теме отдельный 22-минутный выпуск своего postgres.fm (вообще-то они его ведут с Майком Кристофайдесом — Michael Christofides, pgMustard, но он в отпуске). На страничке этого подкаста как всегда много полезных ссылок.

Некоторые статьи и релизы

When Hell Freezes Over?

Александр Коротков (Alexander Korotkov, основатель компании и разработчик OrioleDB) начинает с тревожного списка выхода из строя баз: в облаках это Mandril на MailChimp, Manta Storage на Joyent и ещё сервиса мониторинга на Sentry. Пообещал, что, если положиться на OrioleDB, то всё будет хорошо, но этим, конечно, Александр не ограничился. В статье много тонкостей о проблемах с 32- и 64-разрядными xid. Александр ещё и напоминает: дело не только в них. Например, SLRU-буферы тоже требуют внимания при переходе на 64-разрядные xid. Патчи, внедряющие 64-xid подвисли, но и они не решат полностью все проблемы.

А между тем сама OrioleDB, о которой говорили давно (эх, вспоминаю Postgres-вторники/#RuPostgres с ностальгией), перешла в фазу OrioleDB beta. Описание её архитектуры здесь, доступен репозиторий на гитхабе.

serverless-pg 2.1

Serverless-postgres — обёртка для модуля node-pg Node.js. Создателей воодушевил Джереми Дайли (Jeremy Daly) с его пакетом serverless-mysql.

Automated index bloat management: How pg_index_watch keeps PostgreSQL indexes lean

Макс Богук (Max Boguk, Data Egret) пишет об инструменте pg_index_watch, который автоматически перестраивает распухшие индексы a-la автовакуум, после превышения некоторого порога. И рассказывает, что это за порог, откуда взялся.

Это продолжение Please welcome Pg_index_watch — a utility for dealing with index bloat on frequently updated tables — скорее вступления, а не статьи.

Configuring PgBouncer for Multi-Port Access

В комментариях к заметке Running PostgreSQL on two ports, о которой мы говорили в прошлом выпуске, Робер Бернье (Robert Bernier) обещал поделиться, как он запускает PgBouncer на нескольких портах — как только выдастся свободное время. Сказано — сделано!

Стандарты

SQL:2023 is out

Еще в апрельском выпуске мы рассказывали, что Питер Айзентраут написал 2 статьи о появившемся стандарте. Во второй он только проставляет статусы и версии, в которых появилась поддержка соответствующих пунктов стандарта:

SQL:2023 is finished: Here is what«s newи Postgres and SQL:2023: What’s Supported?

Теперь же Питер поделился ссылками на ISO SQL 2023.

Функциональные языки в PostgreSQL: стар и млад

PL/Haskell v3.0

PL/Haskell extension. Это расширение, которое даст возможность работать на Haskell внутри базы, то есть можно писать функции PostgreSQL (а не приложения) на функциональном языке Haskell, и они будут исполняться внутри кода сервера PostgreSQL. О том, как установить расширение на различных платформах, и ещё о некоторых деталях написано здесь. rpm- и apt-репозитории тут.

В микрозаметке к версии 3.0 сказано только об одном изменении. Зато важнейшем: теперь есть недоверенный «процедурный» язык Haskell. То есть теперь имеется не только plhaskell, но и plhaskellu — как, скажем, в случае Java или Perl pljava/pljavau и plperl/plperlu. Кстати, чтобы освежить в памяти принципы (не)доверенных языков PostgreSQL да и вообще серверного программирования, загляните (ещё раз?) в статью Ивана Панченко Серверное программирование на «человеческом» языке (PL/Perl, PL/Python, PL/v8).

Это молодое расширение, ему нет и года, версия PL/Haskell v1.0 появилась на гитхабе в начале октября 2022-го.

А вот дальний родственник — функциональный язык PL/R внутри PostgreSQL появился уже без года 20 лет назад! И сделал его весьма уважаемый в сообществе человек — Джо Конвей (Joe — Joseph E. Conway, не путать с покойным Джоном Конвеем, автором игры Жизнь, о которой мы уже писали выше). Вот интервью с Джо.

Есть PDF доклада Конвея Easy Statistical Analysis in PostgreSQL with PL/R, с которым он выступил на PgDay 2015 в Санкт-Петербурге, и есть статья по мотивам на хабре Cтатистический анализ в PostgreSQL с помощью PL/R.

Круглый стол и конференции

Круглый стол по будущему экосистемы Postgres состоялся 7-го июня. В интересном составе. В нём участвовали:

  • Хейкки Линнекангас (Heikki Linnakangas), сооснователь Neon,

  • Дени Люсье (Denis Lussier), сооснователь и техдир PGEdge,

  • Кевин Джерниган (Kevin Jernigan), ведущий менеджер продукта в Google Cloud,

  • Рай Уокер (Ry Walker), сооснователь CoreDB,

  • Картик Ранганатан (Karthik Ranganathan), сооснователь Yugabyte.

PGDay Israel

PGDay Israel 2023, 7-я по счёту, пройдёт 19-го октября. Организационный комитет:

Работы отбирают:

  • Эмиль Школьник (Emil Shkolnik,  сооснователь и гендир тель-авивской Awide Labs,

  • Йосси Шауль (Yossi Shaul),  замдир по архитектуре калифорнийской JFrog,

  • Умар Шахид (Umair Shahid,  Percona — так написано на сайте, но, насколько нам известно, Умар покинул Percona и основал Stormatics).

PostgreSQL Conference Europe 2023

13-я ежегодная европейская конференция по PostgreSQL состоится в Праге 12–15 сентября.

PGDay UK 2023 — Call for Sponsors & Call for Papers

PGDay UK, которая должна состояться 12-го сентября в Лондоне, зовёт спонсоров и докладчиков. Дедлайн 21-го июля. Чьи доклады приняли, будет известно не позже 8-го августа.

Прошедшие

PGConf.be 2023 прошла быстренько и скромно 12-го мая в Лёвен-Хаасроде, зато оставила после себя следы. Выложили по полдюжины слайдов и аудиозаписей докладов. Среди них любопытные. Не часто, например, докладывают о pg_hint_plan — произведении программистов японского Центра разработки NTT OSS. О нём говорит Франк Пашо (Franck Pachot, YugabyteDB). Там докладывал и Павло Голуб (Pavlo Golub, Cybertec), но он ещё и написал заметку, где изложил впечатления. Его в частности заинтересовал доклад Элайзы Беннет (Eliza Bennet, PostgreSQL CoC) о том, как продвигать идеи DEI в PostgreSQL-сообщество.

Но куда обильнее свидетельства, оставляемые Citus Con:

После апрельского Citus Con 2023 выложили целую коллекцию из 37 видео. Среди них и ожидаемые, как, например, речь ведущего архитектора баз Citus Марко Слота (Marco Slot) — The Distributed PostgreSQL problem & how Citus solves it или как доклад Брюса Момджана (Bruce Momjian, EDB) — Postgres and the Artificial Intelligence Landscape. Так и неожиданные. Скажем, доклад Ивана Визмитинова (Ivan Vyazmitinov) — Citus & JSON for real-time analytics at Vizor Games. Это игровая компания (читается Вайзор), основанная 14 лет назад студентами БГУИР (Белорусского Государственный Университета Информатики и Радиоэлектроники). Штаб-квартира на Кипре.

Вот ведь как — начали с игр и ими же заканчиваем.

© Habrahabr.ru