Практика: PostgreSQL + pgx
Онлайн редактор кода для Go
Здесь вы можете попробовать свои силы в программировании на языке Go. Для этого мы предоставляем вам онлайн редактор кода, в котором вы можете написать свой код и запустить его.
❗️ При обновлении страницы код пропадёт, по этому, сохраните свой код куда-нибудь, если он важный.
Задание 1 — Простое подключение и ping
Задание 1: Подключение и проверка
⏱️ Примерное время: 10-15 минутСоздай модуль `github.com/ваш-ник/db-cli`. Подключись к PostgreSQL через pgx.Connect и сделай Ping. Выведи статус подключения.
Требования:
go mod init github.com/ваш-ник/db-cli- функция
Connect(ctx context.Context, connStr string) (*pgx.Conn, error) - в main:
conn, err := Connect(ctx, "postgres://...") defer conn.Close(ctx)conn.Ping(ctx)→ "Подключено!" или ошибка
Пример вывода:
Подключение к localhost:5432/db=testdb...
Успешно подключено к PostgreSQL!
Задание 2 — Пул соединений + простая выборка
Задание 2: Пул + выборка пользователей
⏱️ Примерное время: 20-25 минутСоздай пул pgxpool. Напиши функцию GetUsers(pool *pgxpool.Pool) ([]User, error). Верни всех пользователей из таблицы users.
Требования:
- структура
internal/models/user.go:type User struct { ID int; Username string; ... } pkg/db/db.go:var Pool *pgxpool.Pool; func InitPool(connStr string) error- функция
GetUsers(ctx context.Context) ([]*User, error) - используй
pool.Query+rows.Scan - обработай
pgx.ErrNoRows
Пример вывода:
Пользователи:
1 | alice | alice@example.com | 2025-01-01
2 | bob | bob@example.com | 2025-02-15
Задание 3 — CRUD-операции с пользователями
Задание 3: Полный CRUD для пользователей
⏱️ Примерное время: 25-35 минутРеализуй UserRepository с методами: Create, GetByID, Update, Delete, List. Используй транзакции для Create+Update.
Требования:
internal/repository/user.go:type UserRepository struct { pool *pgxpool.Pool }- методы:
Create(ctx, user *User) error,GetByID(ctx, id int) (*User, error),Update(ctx, user *User) error,Delete(ctx, id int) error,List(ctx, limit, offset int) ([]*User, error) - Create и Update — в транзакции
- обработай
pgx.ErrNoRows
Пример вывода:
Создан пользователь: ID=100, username=artem
Получен: ID=100, username=artem, email=artem@example.com
Обновлено: email → new@email.com
Удалён пользователь ID=100
Задание 4 — JSONB и массивы в PostgreSQL
Задание 4: Работа с JSONB и массивами
⏱️ Примерное время: 25-35 минутСоздай таблицу user_profiles (user_id, settings jsonb, tags text[]). Реализуй сохранение и чтение профиля.
Требования:
- структура
UserProfile { UserID int; Settings map[string]any; Tags []string } SaveProfile(ctx, profile *UserProfile) error→ INSERT/ON CONFLICT UPDATEGetProfile(ctx, userID int) (*UserProfile, error)- pgx автоматически сериализует map в JSONB и []string в text[]
Пример вывода:
Сохранён профиль user_id=1
Настройки: map[theme:dark notifications:true]
Теги: [admin developer]
Задание 5 — Batch и CopyFrom: массовая загрузка
Задание 5: Массовая загрузка данных
⏱️ Примерное время: 35-50 минутСгенерируй 1000–5000 пользователей и загрузи их в таблицу двумя способами: pgx.Batch и CopyFrom. Сравни время.
Требования:
- функция
GenerateUsers(n int) []User BatchInsert(ctx, users []User) error→ pgx.BatchCopyInsert(ctx, users []User) (int64, error)→ pgx.CopyFrom- замерь время выполнения обоих методов
- логируй через slog: время, количество строк
Пример вывода:
Сгенерировано 5000 пользователей
Batch: 2.45 сек, 5000 строк
CopyFrom: 0.38 сек, 5000 строк
CopyFrom быстрее в 6.4 раза!
Задание 6 — Итоговое: CLI-утилита для работы с БД
Задание 6: CLI-утилита для управления пользователями (итоговое)
⏱️ Примерное время: 50-80 минутСоздай CLI-утилиту `db-cli` с командами: add-user, list-users, get-user, update-user, delete-user, import-users (CSV), stats. Используй многослойную структуру.
Требования:
- структура проекта как в лекции + cmd/db-cli/main.go
- флаги/аргументы через flag или cobra (по желанию)
- слои: internal/config, internal/models, internal/repository, pkg/logger, pkg/utils
- миграция через goose (create_users_table)
- импорт CSV через CopyFrom
- статистика: count, avg, top-5 и т.д.
Пример запуска:
db-cli add-user --username artem --email artem@example.com
db-cli list-users --limit 10
db-cli import-users users.csv
db-cli stats
Это задание — полноценная CLI-утилита для работы с PostgreSQL, готовая к использованию в реальных проектах.
PostgreSQL + pgx — это комбо, которое используют почти все серьёзные Go-проекты в 2026 году.
Пул соединений, транзакции, CopyFrom и goose-миграции — must-have для любого бэкенда.