![](https://habrastorage.org/getpro/habr/upload_files/587/cc8/3b4/587cc83b4d25eead87d113e1d73cb7d2.jpg)
Образование
Перевод книги PostgreSQL 14 изнутри Егора Рогова (отдел образования Postgres Professional) завершён! Переводила на английский Людмила Мантрова.
Книга до этого публиковалась кусочками по мере поступления. Теперь PostgreSQL 14 Internals можно сгрузить целиком (и бесплатно) в PDF-версии. Идут работы по организации бумажной версии. Её будут печатать в режиме print-on-demand. Комментарии приветствуются по адресу edu@postgrespro.ru.
В финальной части подробно рассматривается каждый из типов индексов Postgres, показывается, как методы доступа, классы операторов и типы данных работают вместе. Напомним, что русская версия книги PostgreSQL 15 изнутри уже давно доступна и в бумажной, и в PDF-версии.
Отдел Образования Postgres Professional выложил видео курсов, записанных в Элисте в августе 2022. Подробней здесь.
Миграция
Весьма актуальное расширение - pgtt может создавать таблицы в стиле оракловых Global Temporary Tables, ими управлять и работать с ними, что, конечно, важно при миграции с Oracle. Если не в миграции и совместимости дело, то обычные временные таблицы PostgreSQL предпочтительны, - считает автор этого расширения Жиль Дароль (Gilles Darold, таперь в MigOps). Если уж совсем без них обойтись не получается.
В новой версии только исправления, но важные: Жиль убрал много лишних блокировок, подробности здесь, а загружать тут.
Storing Network Addresses in Oracle vs Postgres vs SQL Server
Джагадиш Пануганти (Jagadeesh Panuganti, MigOps) пишет о постгресовых типах inet, cidr и macaddr. Вообще-то, никаких тонкостей конвертации их из Oracle и SQL Server в типы Postgres нет, так как нет ничего подобного ни в Oracle, ни в SQL Server. Поэтому эти данные извлекаются просто из varchar, в которых обычно там хранятся. Но статья не (совсем) бессмысленная: показано, как можно воспользоваться операциями над этими постгресовыми типами.
Accelerate oracle to postgresql migration journey - top 10 challenges and mitigation
Пока это всего лишь анонс доклада на PGDay Chicago 2023, о котором ниже.
AI
What's Postgres Got To Do With AI?
По мнению автора, Кристофера Уинслета (Christopher Winslett, Crunchy Data), в PostgreSQL уже всё есть для того, чтобы хранить данные ИИ и оперировать ими.
Он сочинил код на Ruby, который работает через OpenAI API. Для демонстрации он выбирает простенький движок рекомендательного ресурса с рецептами разных блюд, Он умеет:
посылать данные в модель OpenAI,
создавать базу,
подписаться на OpenAI и получить API-токен,
установить URL базы в строку соединения Postgres и OPEN_API_KEY в величину из предыдущего пункта,
отпарсить xml-файл с рецептами и загрузить их в базу,
получить OpenAI-эмбеддинги,
и, в конце концов, запросить похожие рецепты.
Для SQL-запросов, которыми и выбираются подходящие рецепты, используется расширение pgvector (не путать с tsvector), разработанное Эндрю Кейном (Andrew Kane). Есть варианты для самых разных языков. Даже для Юлии и для Луа.
Storing OpenAI Embeddings in Postgres with pgvector
Грэг Ричардсон (Greg Richardson, Supabase) рассказывает примерно о том же, и тоже использует pgvector (кстати, это его название, а устанавливается оно просто как CREATE EXTENSION vector - без pg). Но ещё и объясняет на пальцах (на самом деле на котиках), что такое эмбеддинги, и как это работает.
PostgresML (расширение - pgml) это система для машинного обучения: обучает модели, предсказывает, обучившись уму-разуму, при этом все данные лежат в Postgres, а запросы делаются обычными SQL. Поддерживаются алгоритмы классификации и регрессии Scikit Learn, XGBoost, LightGBM и пред-обученные (pre-trained) модели глубокого обучения от Hugging Face.
Доступна в docker, там же руководство - как быстренько попробовать. Можно начать с работы в облаке. Список изменений в версии 2.2 здесь.
Есть часовое видео, в котором показывают, как запустить машинное обучение с PostgresML с Hasura: Getting started with machine learning in Postgres using Hasura and PostgresML.
Кстати, о Хасуре: Hasura - это слой между приложением и базой, который преобразовывает SQL в GraphQL, предоставляя соответствующий GraphQL API. Поддерживает не только PostgreSQL, но и многие форки, даже молодой и входящий в моду Neon. В данном случае авторы видео демонстрировали возможности Хасуры, заманивая зрителей модной темой ML.
Поддерживает pgml Лев Кокотов ака levkk. Он же поддерживает Постгрес-кота: PgCat - пулер с шардингом, балансировкой нагрузки и аварийным переключением (failover).
А вот освежающий душ и ложка дёгтя:
Why machine learning for automatically optimizing databases doesn't work - так назвал свой доклад на грядущей конференции в Чикаго классик, профессор Университета Карнеги - Меллона Энди Павло (Andy Pavlo). Почему - узнаем только 20-го апреля. В утешение скажем, что он обещает рассказать и о некоторых (пока немногочисленных) историях успеха в отрасли, и о дисскуссиях на эту тему в академических кругах. Об этой конференции пара слов будет в разделе Конференции.
Отдыхать и/или пить?
Which is worse when working on production databases? Being drunk or tired?
Удивительная статья Криса Трейверса (Chris Travers). Он рассказывает, как однажды на Fosdem задал такие вопросы залу:
доводилось ли вам наблюдать админа продакшн-базы в состоянии алкогольного опьянения? (половина зала подняла руки)
были из-за этого серьёзные инциденты? (ни одна рука не поднялась)
случалось ли вам наблюдать серьёзные инциденты на продакшн из-за усталости админа? (опять половина зала)
Я не призываю напиваться перед работой или во время, - успокаивает Крис - я призываю: друзья, не подпускайте ваших друзей к продакшн, когда они устали!
The Coming Storm: Geopolitics and PostgreSQL in a Changing World
Другая его статья, на совсем трезвую (и отрезвляющую) тему. Существенная часть - комментарии к ней.
Максимы Орловы
Моё небольшое приключение: вижу ссылку на статью коллеги - Максима Орлова. Статья на английском. Аа, значит это он уже перевёл недавнюю статью. Дело доброе, статья полезная. Но название статьи мне незнакомо, а у Максима не так много пока статей, чтобы в них запутаться. Открываю. Ну ничего себе! Лицо другое, другой Максим Орлов. И тоже пишет о Postgres.
Should You Use char, varchar, or text in Postgres?
Из заметки Максима следует, что char(n) или varchar(n) использовать смысла нет. Там, где можно предположить полезность этих типов, лучше использовать text + constraint. О совместимости/миграции в заметке не говорится. Вообще-то Максим Орлов с ресурса Maxim Orlov - специалист по Node.js, и PostgreSQL упоминается там постольку-поскольку - в отличие от Максима Орлова, опубликовавшего недавно статью Устройство 64-битных счётчиков транзакций в Postgres Pro Enterprise. Там не просто о Postgres, а о самых "потрохах", самых "подкапотных" подробностях. Мы об этой статье говорили в предыдущем выпуске, сейчас не будем повторяться.
Ещё статьи
ZFS’s Atomic I/O and PostgreSQL
С этой статьёй Томаса Манро (Thomas Munro, MS Azure) как-то рекомендовал ознакомиться Михаил Жилин (Postgres Professional). А уж он знает толк в связке Postgres + ZFS: статья Битвы на территории ZFS, где соавтором Миши был Пётр Петров, одна из самых профессиональных, какие доводилось видеть на просторах хабра.
Аномалии под нагрузкой в PostgreSQL: о чём стоит помнить и с чем надо бороться
Это совсем недавняя статья Михаила. Она основана на его докладе на HighLoad++ в ноябре 2022. Автор делится своими навыками анализа высоконагруженных систем, всё время имея в виду конкретные ситуации с конкретными клиентами.
Там рассказывается, как пользоваться Perf и FlameGraph при анализе работы PostgreSQL. Есть неочевидные вещи, например: Perf должен быть собран с поддержкой библиотеки libunwind, иначе его данным грош цена.
Но это лишь инструменты. Автор переходит к механизмам Postgres из самых тонких и важных: к снимкам (snapshots). Как часто их надо брать? Зависит ли это от версии, или только от уровня изоляции? Затем показывает, как следить за подтранзакциями (если не следить, то они в высоконагруженной системе могут наделать дел). Так ли велик SLRU-кэш? В каких версиях можно мониторить инвалидацию кэша системных каталогов?
Есть главка с интригующим названием: антитюнинг. Но самая увлекательная - на мой вкус - главка Баг наблюдаемости под нагрузкой (HighLoad Observability Bug). Там ещё много интересного.
На всякий случай: у Михаила Жилина (aka mizhka), как и Максима Орлова, есть на хабре двойник - Михаил Жилин aka spirit9891, но он о Postgres, кажется, не пишет.
The smgr interface in PostgreSQL
Дэвид Ян (David Zhang, High Go, канадское отделение) опять рассказывает об интересных, не самых распространённых задачах при работе с Postgres. Эта статья продолжает рассуждения автора о хранении. Предыдущая называлась The Amazing Buffer Tag in PostgreSQL. Я бы советовал читать её, уже ознакомившись, скажем, со статьёй (=фрагментом книги, о которой мы писали в разделе Образование) Егора Рогова: WAL в PostgreSQL: 1. Буферный кеш. Также Дэвид посвятил статью теме How to setup Lustre file system and run Postgres on it (Lustre поверх CentOS 7). И вот теперь, размявшись на этих темах, он перешёл к интерфейсу smgr. Статья коротенькая, как и все у Дэвида, зато с кусками кода на C.
У него также есть о Transaction ID and Snapshot information functions и parallel commit in postgres fdw - о FDW, согласитесь, пишут нечасто.
Creating new PostgreSQL enum data types using pg_type_template
Артур Закиров (Artur Zakirov), которого я знаю как толкового разработчика (сейчас он работает в берлинской adjust.com, купленной в 2021-м калифорнийской AppLovin), написал статью о новых расширениях, которые они создали для новых типов данных:
istore: основывается на hstore. В
istore
и ключи, и их значения хранятся и обрабатываются как integer.pg-base36: реализует алгоритм кодирования base36 binary-to-text.
ajbool: логический тип, со значениями TRUE/FALSE/UNKNOWN, причём UNKNOWN
Новые типы enum:
pg-os_name: это расширение добавляет enum-ы, представляющие различные ОС (список их можно увидеть в коде.
pg-country: 2-буквенные enum-ы государств.
pg-device_type: enum-ы типов устройств (например: mac, phone, simulator, unhnown).
новые enum-ы можно сгенерить разработанным для этой цели питоновским пакетом pg_type_template. Артур показывает, как им пользоваться.
Exposing Postgres Performance Secrets
Крейг Кирстинс (Craig Kerstiens, Crunchy Data) поделился всего 4 секретами и каждому отвёл по абзацу. Тем лучше. Секреты полезные и конкретные. Даже сам дал саммари:
включите pg_stat_statments;
настройте журнал на логирование запросов больше 1 сек;
загрузите auto_explain, и настройте его, чтобы срабатывал для тех запросов, что дольше 2 сек;
автоматически убивайте запросы дольше 30 сек.
Привилегии
Object Ownership and Default Privileges
Райан Буз, о котором мы часто (и в этом выпуске тоже) вспоминаем по поводу его проекта Пятнецы, сам позиционирует себя как админ Postgres, испытавший на своей шкуре проблемы перехода на неё с MySQL и SQL Server.
В первой статье он растолковывает самые азы, начиная с AuthN & AuthZ - аутентификации и авторизации; ролей, объектов БД и привилегий; принципа PoLP (принцип минимальных привилегий) и суперпользователя. После этого переходит к более конкретным вещам - иерархиям ролей, отличиям PostgreSQL 15 от PostgreSQL 14 по этой части, о группах, даёт демонстрационные примеры.
Во второй статье он собирается удивить админов других СУБД ещё более тем, как работают роли в отношении прав собственности на объекты БД (object ownership). И даже пытается думать за таких админов, например: вот вы всё говорите, что владелец важен. Но почему? Наверняка другая роль с соответствующими привилегиями в той же схеме сможет работать с этой [то есть чужой] таблицей? - нет, не совсем так. Это зависит. В этой же статье Райан разбирает и привилегии по умолчанию.
Такой подход - от "чужого" - мне определённо нравится. Но мне было бы интересней увидеть его развитие в духе "а вот в MySQL по-другому - вот так".
Coming to Postgres 16: A New Way to Reserve Connection Slots
В отличие от Райана, Павло Голуб (Pavlo Golub) говорит уже о различиях ролей в PostgreSQL 16, а точнее о появлении новой роли: pg_use_reserved_connections.
Она даёт возможность резервировать соединения не только суперпользователю, а и тем ролям, которые входят в эту новую роль. Об этом писал, кстати, и Павел Лузанов в недавней статье-обзоре PostgreSQL 16: Часть 4 или Коммитфест 2023-01. На днях появилась и английская версия, перевод Александра Мелешко. Так что интересующихся англоязычных коллег можно переадресовывать к ней.
Can we make permissions management more user-friendly?
Генриэтта Домбровская (Henrietta 'Hettie' Dombrovskaya) пишет в своём блоге, что, как и в политике, в Postgres нужны законы, чтобы демократия не обратилась анархией. И многое для этого сделано, но проблемы есть:
непросто увидеть все привилегии доступа конкретного пользователя;
не отменить ли прямое наделение привилегиями?
проблема с правами доступа схемы по умолчанию;
разное.
Самое, может быть, интересное: к обсуждению подключается другой классик: Лоренц Альбе. И ещё Диана Фэй (dian m fay), которая, с её слов, колдует со смесью PostgreSQL, Snowflake, GraphQL (с Postgraphile), Kubernetes и TypeScript.
PGSQL Phriday #006
Игра, которую придумал Райан Буз (Ryan Booz), не даёт обойти её стороной. Опять любопытный поворот. В 6-й серии - PGSQL Phriday #006 - ход Гранта Фритчи (Grant Fritchey, коллега Райана по Redgate). Он поставил вопрос так:
Есть ли вещь, о которой вы могли бы сказать: о! если бы я это знал, когда учился Постгресу!
Там пара абзацев, но смысл остался примерно таким.
One Thing You Wish You Knew While Learning PostgreSQL
Внятно и неожиданно ответил на этот простой/трудный вопрос Габриэль Рот (Gabrielle Roth), он же Gabriellephant, он же @gorthx из команды PGExperts:
Для меня это простой вопрос. Это:
\e [filename] и
\e
(без имени файла) - даёт возможность редактировать ваши самые часто повторяемые запросы. Для исправления ошибок это бесценно. Также и для добавления/удаления из запроса столбцов и для многого другого.
Если вам нравится использовать\i,
запуская запросы из файла (а кто ж не любит, добавляет автор), используйте лучше \e [filename]
. Сам я узнал о \e
от Дэвида Уиллера (David Wheeler) на заре PGXPUG. До этого времени я копипастил запросы из текстового редактора. Так что это было для меня ну просто life-changing.
Вот как немного нужно, чтобы поменять свою жизнь :)
Сам зачинщик этой бузы, Буз, ответил пространным и невнятным описанием многих и многих пунктов. Его жизнь поменять было, видимо, не так просто.
Андреас Шербаум (Andeas Scherbaum) откликнулся в своём блоге ads' corner почти в унисон Габриэлю: PGSqlPhriday #006: psql commands
Из клиентов PostgreSQL я предпочитаю psql. Две фичи этого мощного средства мне особенно нравятся:
\timing
\watch
Первая в psql уже очень давно, но совершенствовалась. Второй - пару лет от роду.
Кстати, о psql: список Летиции Авро (Laetita Avrot) из 100 подсказок разросся до 152 psql Tips.
Некоторые релизы
Жюльен Руо (Julien Rouhaud) сообщил о доступности бета-версии своего pg_anonymize. Информация пока скудная, сам не пробовал. В заголовке страницы написано dynamic data anonymization - то есть статической анонимизации, видимо, нет. И говорится, что это простое средство прозрачной анонимизации.
Как известно, давно существует PostgreSQL Anonymizer от Dalibo с богатой функциональностью. Недавно (в версии Postgres Pro Enterprise 15.1.1) появился pgpro_anonymizer с похожим набором функций.
PgManage 1.0a: GUI Administration Tool for Postgres
Новый форк подзабытой OmniDB (последнее пополнение 3 года назад). Кросс-платформенный менеджер баз данных. Поддерживает Postgres 9.6–15. В отличие от OmniDB, поддерживает конфигурирование Postgres-сервера. Эта версия в статусе альфы.
Позволяет не только строить модель базы данных, но и работает в другую сторону: по существующей базе обратным инженирингом строит графическое её представление, а потом может генерить SQL для синхронизации модели и базы. Ещё умеет администрировать базы, исполнять SQL, просматривать и преобразовывать данные. Есть официальный сайт и чейнджлоги версий.
Конференции
Пройдёт 3-4 апреля в бизнес-центр Рэдиссон Славянская (Площадь Европы, д.2). Закончилась регистрация по ценам для "ранних". Но участие студентов и преподавателей — бесплатное. Заявки на доклады принимаются, программа ещё не определена.
Состоится 20 апреля. Расписание уже есть на сайте. Много знакомых имён. Обратил внимание, например, на you are using subtransactions and don’t even know it Сэми Имсей (Sami Imseih) и Шона МакКой (Shawn McCoy). Про некоторые было выше. Докалад Джимми Энджелакос (Jimmy Angelakos) будет в самом конце, а тема многих заинтригует: don't do this. Что нам нельзя делать пока неизвестно, однако уже известны из анонса области, где следует действовать осторожно:
типы данных при хранении;
подсекции ((Sub-)Partitioning);
дурные SQL-привычки;
наследование таблиц;
соединения.
Пишет Генриэтта Домбровская - March Chicago PUG and other updates:
В честь Международного Женского Дня 8 марта, мы отдаём бесплатно 3 билета на PG Day Chicago первым 3 женщинам. Подарок от Postgres Women. Но для этого надо зарегистрироваться здесь. Кто счастливые обладательницы - неизвестно, комментариев на этот раз нет.
Эта большая линуксовая конференция пройдёт 9-12 марта в Калифорнии, в Пасадене. Два зала отданы под доклады о Postgres, но только в первые 2 дня. 9-го - разное, 10-го - с уклоном в репликацию и WAL. Приглашён и выступит Брюс Момджан и многие знакомые нам люди. Но я обратил внимание ещё и на такие любопытные выступления:
Avoid Angering the PostgreSQL Elder Gods - оказывается, Старые Боги Постгреса это один бог (или чёрт), действительно старый: Wraparound. Соответственно, в этом докладе Кит Фиске (Keith Fiske, Crunchy Data) расскажет, как мониторить приближение бога, как настроить автовакуум. Справедливости ради: другой спящий (и странноватый) бог всё же упомянут: распухание таблиц и индексов (bloat). Будет рассказано, как его не разбудить ненароком. Но на эту тему более подробно, видимо, будет говорить Питер Гейган (Peter Geoghegan) в докладе Bloat in PostgreSQL: a taxonomy.
How To Tame Mastodon: Lessons For PostgreSQL At Scale - мастодонт здесь не набирающая популярность соцсеть, а быстрорастущая база в 25ТБ: 15 реплик; WAL, растущий 150ГБ/ч и загрузка более 230 млн. транзакций в час на праймари. Докладывают Дэвид и Элизабет Кристенсен (David, Elizabeth Christensen).
Building Your Own PostgreSQL DBAs from Available Materials - оказывается, подходящий материал для создания Postgres-админов - это MySQL-админы, только надо уметь их готовить. Автор, Дэйв Стоукс (Dave Stokes) работал менеджером по сертификации в MySQL AB. В этих кругах говорят: найти квалифицированного админа MySQL трудно, PG-админа - невозможно. Дэйв обещает рассказать, как MySQL-админу переложить свои навыки на Postgres.
Открывает Арун Гупта (Arun Gupta), вице-президент и ген. менеджер Open Ecosystem Initiatives в Intel.
Состоится 29-30 июня в Рапперсвиле на берегу Цюрихского озера в Университете Прикладных Наук Восточной Швейцарии (Eastern Switzerland University of Applied Sciences). Заявки на доклады до 17-го апреля, а регистрация уже открыта.