Pgx в Go: полный курс по работе с PostgreSQL
PostgreSQL — база номер один в Go-бэкендах, а pgx — самый быстрый и самый используемый её драйвер: пула pgxpool достаточно, чтобы забыть о ручных соединениях, а Batch и COPY ускоряют массовые операции в разы.
Курс ведёт от первого подключения до продакшен-приёмов: сканирование строк и структур, типы Postgres (UUID, JSONB, массивы), транзакции и паттерн «с транзакцией», pgconn.PgError и коды SQLSTATE, LISTEN/NOTIFY, миграции, тесты с testcontainers. Каждый урок — реалистичный код с построчным разбором, честные грабли и интерактивные задания прямо в браузере.
Чему научитесь
Чему научитесь
- Подключаться к PostgreSQL через pgx и pgxpool
- Сканировать строки в структуры и справляться с NULL
- Работать с типами Postgres: UUID, JSONB, массивы, timestamptz
- Проводить транзакции и массовые вставки через Batch и COPY
- Разбирать pgconn.PgError и строить свои типы ошибок
- Тестировать код с testcontainers и pgxmock
Для кого курс
- Backend-разработчикам, которые пишут сервисы на Go с PostgreSQL
- Тем, кто работает через database/sql и хочет скорость pgx
- Готовящимся к собеседованиям: SQL-слой спрашивают почти всегда
Что понадобится
- Базовый синтаксис Go: структуры, срезы, ошибки, контекст
- Желательно понимать SELECT и INSERT — ускорит прохождение
Программа курса: 25 уроков
- 1Знакомство: зачем Go-проекту pgxdatabase/sql, lib/pq и pgx: кто быстрее и почему.~16 мин · pgx golang, зачем нужен pgx
- 2pgx v5: установка и первое подключениеgo get, pgx.Connect, Ping и первая ошибка соединения.~18 мин · pgx подключение go, pgx connect
- 3Строка подключения и DSNpostgres://, параметры sslmode, env-переменные и дефолты.~16 мин · dsn postgres go, строка подключения pgx
- 4Пул соединений pgxpoolMaxConns, жизненный цикл коннектов, Ping перед работой, лимиты базы.~20 мин · pgxpool go, пул соединений postgres
- 5Exec и Query: первые запросыINSERT без результата и SELECT со строками.~18 мин · pgx query example, pgx exec
- 6Scan: строки, NULL и указателиsql.Null-типы, *string и ловушка пустых значений.~18 мин · pgx scan null, null postgres golang
- 7CollectRows и RowToStructByNameСрез структур одной строкой: магия обобщений.~20 мин · pgx collectrows, rowtostructbyname
- 8Плейсхолдеры $1 и SQL-инъекцииПочему Sprintf убивает базу и как правильно подставлять.~18 мин · sql инъекции go, pgx placeholders
- 9Интерфейс database/sql: pgx через StdLibКогда нужен абстрактный драйвер и что теряете.~16 мин · database/sql pgx, pgx stdlib
- 10Типы Postgres: UUID, TIMESTAMPTZ, NUMERICpgtype: какие типы Go соответствуют колонкам.~20 мин · pgtype uuid, типы postgres golang
- 11JSONB: гибкие данные без миграцийХранение структур и карт, запросы по JSON-полям.~20 мин · jsonb golang, jsonb postgres go
- 12Массивы Postgres: []string и pgtype.ArrayМногозначные колонки: когда массив лучше таблицы.~18 мин · массивы postgres go, text[] pgx
- 13Транзакции: Begin, Commit и RollbackАтомарные операции и откат при ошибке.~20 мин · транзакции pgx, pgx begin commit
- 14Паттерн «с транзакцией»: функция-обёрткаWithTx: не забываем Rollback никогда.~20 мин · withtx pattern, pgx транзакция обертка
- 15Контекст и таймауты запросовcontext.WithTimeout: не ждём зависший SELECT.~16 мин · pgx context timeout, таймаут запроса postgres
- 16Ошибки pgx: pgconn.PgErrorКоды SQLSTATE, Severity и Detail из ошибки.~18 мин · pgerror go, sqlstate коды
- 17Ошибка 23505: конфликты уникальностиon conflict, Upsert и дружелюбные ответы API.~18 мин · 23505 unique violation, on conflict go
- 18Batch: сотни запросов за один рейсpgx.Batch: отправка пачки без лишних поездок.~20 мин · pgx batch, массовые запросы go
- 19COPY FROM: миллионы строк за секундыCopyFrom против INSERT: бенчмарк на глазах.~20 мин · pgx copyfrom, массовая вставка postgres
- 20LISTEN/NOTIFY: события из базыРеактивность: уведомления вместо опроса таблицы.~20 мин · listen notify postgres go, pgx notify
- 21Миграции схемы: goose и golang-migrateВерсионирование базы: вверх, вниз, безопасно.~18 мин · миграции postgres go, goose migrate
- 22Индексы и EXPLAIN для Go-разработчикаПочему запрос тормозит и как увидеть план.~20 мин · explain postgres go, индексы postgres
- 23Тесты: testcontainers и pgxmockРеальная база в Docker и мок для юнит-тестов.~20 мин · testcontainers go, pgxmock
- 24Логирование и трассировка pgxQueryTracer: кто съел 3 секунды и какой запрос.~18 мин · pgx tracer, логи запросов postgres
- 25Итоговый проект: сервис заметок на pgxCRUD, поиск, теги-массивы и счётчики — целиком.~24 мин · pgx проект, crud postgres go
Вопросы о курсе
Нужен установленный PostgreSQL для курса?
Нет. Каждый запрос разбирается построчно прямо в браузере: код, план, ошибки и интерактивные задания работают без базы. Для локальной практики подойдёт Docker — команда есть в первом уроке.
Какая версия pgx разбирается?
pgx v5 — актуальная мажорная версия: pgxpool, CollectRows, pgtype и RowToStructByName появились именно в ней. Отличия от v4 проговариваются там, где важно.
Почему pgx, а не GORM или sqlc?
pgx — слой под ними всеми. Понимая драйвер, вы понимаете, что делает ORM, где он тормозит и почему сгенерированный sqlc-код в итоге компилируется в вызовы pgx.