Найти в Дзене
Я, Golang-инженер

#69. Освоение PostgreSQL: первая книга, код, официальная документация и онлайн-тренажёры

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением. Хой, джедаи и амазонки! Продолжаю тему изучения СУБД. Backend-разработчик, это стек навыков, но есть два главных навыка - это сам язык программирования и системы управления базами данных. В прошлых публикациях разбирался с SQLite, сейчас перехожу к более сложной СУБД - PostgreSQL. Информации много, расскажу как разбираюсь с этим делом. Я пока не прочитал полностью ни одну книгу по программированию, как-то они не заходят. Чувствую, что это до определённого этапа только может быть полезно, а затем уже полезно браться за профессиональную литературу. С PostreSQL я разбирался с помощью нейросети и чтения документации к внешней библиотеке Migrate. Также мне помог коллега, с которым познакомился через этот блог - объяснил, как поднять СУБД через Docker. В результате научился создавать схемы базы данных через миграции, делать SQL-запросы к базам данных,
Оглавление

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.

Хой, джедаи и амазонки!

Продолжаю тему изучения СУБД. Backend-разработчик, это стек навыков, но есть два главных навыка - это сам язык программирования и системы управления базами данных.

В прошлых публикациях разбирался с SQLite, сейчас перехожу к более сложной СУБД - PostgreSQL. Информации много, расскажу как разбираюсь с этим делом.

1. Практика

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

С PostreSQL я разбирался с помощью нейросети и чтения документации к внешней библиотеке Migrate. Также мне помог коллега, с которым познакомился через этот блог - объяснил, как поднять СУБД через Docker.

В результате научился создавать схемы базы данных через миграции, делать SQL-запросы к базам данных, обрабатывать возвращаемые от БД ошибки и выполнять транзакции.

Код стал более-менее приличным, можете посмотреть учебный проект на GitHub. Далее вкратце об этом проекте:

1.1. Конфигурирование БД

Ниже представлен файл конфигурации, где 12 переменных настраивают БД.

Файл конфигурации
Файл конфигурации

А ниже представлен фрагмент структуры данных в приложении, предназначенной для чтения конфигурации:

Фрагмент кода
Фрагмент кода

Далее я создавал БД через структуру и миграции.

1.2. Создание БД

БД создавал через экземпляр структуры; а ранее создавал БД более примитивными способами. По-моему, этому меня тоже нейросеть научила через ряд удачных и неудачных опытов:

Код
Код

Я подобный код долго практиковал с СУБД SQLite, а затем перенёс знания на PostgreSQL. В этой части разницы не было, но сильно помогло разобраться что такое миграции схем баз данных, начиная от того, как следует называть файл миграций, и заканчивая тем, как их поднять кодом.

Файл миграции
Файл миграции

Часть информации я взял из блога Николая Тузова, и хотя у него есть видео конкретно про СУБД, но подходы я брал из других видео, в частности по разработке телеграм-бота. Например, выводил в отдельную функцию создание строки для подключения к БД с параметрами конфигурации:

Фрагмент кода
Фрагмент кода

Также брал информацию из курса Яндекс Практикум, например выполнить пинг при подключении к БД для проверки, что соединение установлено:

Код
Код

При создании БД использовал ряд констант для создания сообщений об ошибках:

Код
Код

Не факт, что этот способ прям хорош при отладке, но по крайней мере удобен.

1.3. Создание запросов

При создании запросов начал работать через транзакции:

Код
Код

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

Но для меня было на определённом этапом открытием, что можно перед отправкой в БД sql-выражения, сперва выполнить проверку на корректность синтаксиса. А то отправишь sql-выражение в БД с некорректным синтаксисом, и придёт ошибка. А что за ошибка - поди разберись, или элемента такого не было, или где-то сеть накрылась, или ещё что - а так мы один вариант точно исключаем - вариант с неверным синтаксисом.

А синтаксис - это не тоже навык нужно нарабатывать:

Код
Код

Вот такими путями осваивал работу с PostgreSQL. Но это всё имеет местечковый характер, нет цельного понимания картины. Чтобы исправить эту ситуацию, начал системнее подходить к БД.

2. Книжка-малышка PostgreSQL

Так ласково, книжкой-малышкой называют свою книгу сотрудники российской компании Postgres Professional, вот скрин из ТГ-чата:

ТГ-чат
ТГ-чат

Книга бесплатная, можно её скачать >>> здесь <<<

Начал её читать. Первая глава - история PostgreSQL, далее глава о новинках в новой версии СУБД.

Компания Postgres Professional кстати нанимает go-разработчиков, и даже периодически у них бывают стажировки по нашему профилю. Года полтора назад попытался попасть на их стажировку, но задание на тот момент было для меня слишком сложным.

Команда Postgres Professional
Команда Postgres Professional

Книжку-малышку они обновляют каждый год:

Серия книжек-малышек
Серия книжек-малышек

Так выглядит содержание текущей версии за 2024 г.:

Оглавление
Оглавление

Книга на 193 страницы. К слову, если распечатать на бумаге А4 всю официальную документацию по PostgreSQL, то получится 3024 страницы.

Посмотрим, за сколько удастся прочитать эту книгу.

3. Упражнения с SQL

Достаточно онлайн-ресурсов для тренировок с SQL-запросов. Например для того, чтобы на собеседовании продемонстрировать своё умение. Хотя коллега говорил, что не встречал ещё нейросеть, которая может делать сложные SQL-запросы.

Можно заниматься в SQL-тренажёрах. Пост с подборкой тренажёров на Хабре, в т.ч. с курсами или просто сделать запрос в интернет:

https://sql-academy.org/ru/trainer
https://sql-academy.org/ru/trainer

Можно конечно приобрести платный курс, но я сейчас не рассматриваю такой вариант. Также возможны бесплатные курсы с YouTube, но не изучал эту тему подробно, а то что посмотрел наискосок, мне не подходит.

4. Топ вопросов с собеседований

Начал я читать статьи типа "50 вопросов по PostgreSQL с собеседований". Есть и русскоязычные, но большинство англоязычных. И честно говоря, первые вопросы в стиле: "Чем PostgreSQL лучше других СУБД" и ответы восхваляющие PostgreSQL, будто PostreSQL выиграл соперничество с другими СУБД, будто это рекламная кампания, а не реалии. Вопрос, корректны ли последующие ответы в таких подборках.

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

Также коллега поделился своими вопросами с собеседования по PostgreSQL, вот они:

Немного про устройство СУБД;
Индексы;
Влияют ли индексы на джойны;
В чём конкретно разница в уровнях изоляции на примерах;
Как в бд выглядит индекс (что это);
Запросы всякие с вложенностями, джойнами, cte;
Что знаю про представления (вьюшки), триггеры и зачем они нужны;
Как скипнуть блокировку;
Как анализировать план запроса (пример привести что может быть плохого в плане);
Как many to many сделать отношение между таблицами ещё было.

Послушал я эти вопросы, и понял, что о PostreSQL ничего не знаю. Ну, знаю как индексы создать и всё, а что это - хз. Поэтому и понял, чтобы пройти собеседование, нужно не только язык знать (хотя там тоже пробелов немало - почему-то я больше всего переживаю по работе с каналами, горутинами, понимание как работает сборщик мусора и планировщик).

5. Официальная документация

Разбираться с официальной документацией пока не хочу, но полезно знать - что она есть. А ещё есть список красных флагов - чего не делать при работе с СУБД: >>> клик <<<

5.1. Текстовый тип данных

Пример - работа с текстовым типом данных:

Официальная документация
Официальная документация

Здесь рассказано, что полезнее использовать тип данных text, а не char(n).

Не используйте тип char(n). Вам, вероятно, нужен text.
Тип char(n) может понадобиться, когда вы работаете с очень старым ПО.

5.2. Наименования таблиц

Вот что сказано про способ наименования таблиц и столбцов

Официальная документация
Официальная документация

Ключевое - вместо CamaleCase, использовать snake_case:

Используйте для имён только буквы от a до z, цифры от 0 до 9 и подчёркивания, и вам никогда не придётся беспокоиться о кавычках.

Таких лучших практик на странице всего 19 - не так много. Можно за день со всеми ознакомиться, или даже за вечер.

6. Мои ресурсы

В первом параграфе я рассказал о своём изучении PostgreSQL на практике. Большую часть этой информации я описал в своих публикациях: конфигурирование приложений, миграции и т.д. Вот перечень этих публикаций, он может помочь вам освоить СУБД:

  1. Конфигурирование приложения >>> клик <<<
  2. Миграции схемы БД в SQLite >>> клик <<<
  3. Про запуск PostgreSQL через Docker >>> клик <<<
  4. SQLite в Golang >>> клик <<<
  5. А здесь моя песочница на GitHub по закреплению навыка создавать БД кодом, можете повторять этот код для закрепления основных команд: >>> клик <<<

7. Выводы

Итак, эта публикация - взгляд на изучение PostgreSQL при наличии опыта работы с языком программирования. Рассчитываю в первую очередь прочитать книгу и с помощью книги и нейросети разобраться с вопросами, указанными в главе 4. Ну и практика, конечно.

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

https://ru.freepik.com/free-ai-image/portrait-cute-3d-elephant_204391038.htm
https://ru.freepik.com/free-ai-image/portrait-cute-3d-elephant_204391038.htm

Бро, ты уже здесь? 👉 Подпишись на канал для начинающих IT-специалистов «Войти в IT» в Telegram, будем изучать IT вместе 👨‍💻👩‍💻👨‍💻