В самом начале

Я работаю с Postgres в продакшине с 2008-го года, но несмотря на это никогда не считал себя крупным специалистом в нём. Тогда уже вышла версия 8.31, и я помню эту эмоцию радости: “ну, хоть не с двухлетней 8.2”.

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

Сейчас ситуация сильно изменилась. Postgres, благодаря своим широким возможностям очень популярен, а источников информации достаточно.

Но давайте немного вернёмся во времени…

Первая попытка создать блог по углублённому изучению Postgres была сделана где-то в 2015-ом году. В то время я активно изучал сишные исходники и отправил пару патчей, которые попали в релиз 9.62. Мой пропозл по кастомным компрессорам был переведен Александром Коротковым и отправлен с указанием авторства в список рассылки pgsql-hackers3, а патч был готов где-то наполовину.

Работа над патчем позволила мне потрогать системный каталог “изнутри” и добавить новую команду — в оригинале она выглядела примерно так:

create compressor custom_compressor with (
    compress=lz4_compress,
    decompress=lz4_decompress
);

А использовать его предполагалось примерно так:

create table t (
    col1 text compressor custom_compressor,
    col2 text compressor another_custom_compressor,
    ...
);

Чтобы это работало, пришлось расширить таблицу pg_depend, добавив в неё информацию об используемом методе сжатия для каждой колонки.

Вдохновившись этим, я решил создать блог и начал его примерно со следующего поста:

  • берем сырцы из официального гита, а не зеркала на гитхабе;
  • компилируем с --enable-debug;
  • gdb работает вот так;
  • прицепиться к бэкэнду для отладки вот так.

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

Как я вижу этот блог сейчас?

Работая над проектом Managed PostgreSQL, я делился накопленными знаниями не только с коллегами, но и со слушателями курса по разработке на Go. Занятие, которое я проводил, было рассчитано примерно на два часа. Но оно растянулось почти на четыре, а я старался дать ребятам как можно больше той полезной информации, которая действительно поможет им в работе.

Читая после занятия обратную связь и много положительных отзывов, я винил себя за то, что не смог рассказать всё, что хотел бы рассказать. Но на самом деле, делать этого не следовало.

Спустя время, я хотел бы дать новичкам надёжный компас, с которым можно ориентироваться в мире Postgres. Тогда, в самом начале он не помешал бы и мне самому, а подготовка материалов поможет поддержать знания в актуальном состоянии.

Какой будет формат постов?

Посты будут сухими, сжатыми, без вводных слов, нацеленными на практику. Это, возможно, единственный пост, где я позволил себе, если можно так выразиться, “графоманство”.

Какая предварительная подготовка нужна?

Мы точно не будем начинать с азов и учиться писать простейшие запросы. Поэтому хоть какой-то опыт с РСУБД всё же потребуется.

Будет ли какой-то план?

Да. Мы точно начнём с подготовки песочницы.

В процессе я постараюсь не прыгать с одной темы на другую и двигаться последовательно.

Что мне понадобится?

Компьютер, который может потянуть несколько виртуальных машин. Мы будем использовать и Docker, но в случае с базами данных, такая практика может быть полезной только в простых примерах.

Нужно ли уметь работать с Linux?

Досконально — нет. Не бояться эмулятора терминала — да.

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

Что-то ещё?

Думаю, пока всё. Желаю нам всем удачи, терпения и постоянства!