pgx: высокопроизводительный драйвер PostgreSQL
pgxpool, протокол Copy и пакетные запросы
«pgx: высокопроизводительный драйвер PostgreSQL» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое pgx?
github.com/jackc/pgx/v5 — специализированный драйвер Go для PostgreSQL с собственным API, поддерживающим расширенные возможности PostgreSQL, недоступные в database/sql: протокол COPY, уведомления, кэширование подготовленных запросов и многое другое.
Подключение с помощью pgx
Используйте собственный пул pgx или уровень совместимости с database/sql:
// Native pgx pool
pool, err := pgxpool.New(ctx, "postgres://user:pass@localhost/mydb")
if err != nil { log.Fatal(err) }
defer pool.Close()pgxpool
pgxpool.New создаёт управляемый пул соединений. Настройте его с помощью конфигурации, разобранной через ParseConfig:
config, _ := pgxpool.ParseConfig("postgres://...")
config.MaxConns = 10
pool, _ := pgxpool.NewWithConfig(ctx, config)Запросы с помощью pgx
pgx использует функции-помощники pool.Query и pgx.CollectRows:
rows, _ := pool.Query(ctx, "SELECT id, name FROM users WHERE active=$1", true)
users, err := pgx.CollectRows(rows, pgx.RowToStructByName[User])RowToStructByName
pgx.RowToStructByName сопоставляет имена столбцов с полями структуры, используя имена полей в нижнем регистре или теги db, подобно Select в sqlx.
Сканирование одной строки
Используйте pool.QueryRow для запросов, возвращающих одну строку:
var name string
err := pool.QueryRow(ctx, "SELECT name FROM users WHERE id=$1", id).Scan(&name)Пакетные запросы
pgx поддерживает отправку нескольких запросов за один сетевой обмен с помощью pool.SendBatch:
batch := &pgx.Batch{}
batch.Queue("SELECT name FROM users WHERE id=$1", 1)
batch.Queue("SELECT name FROM users WHERE id=$1", 2)
results := pool.SendBatch(ctx, batch)
defer results.Close()Протокол COPY
Для массовой вставки pgx поддерживает двоичный протокол COPY PostgreSQL, который значительно быстрее отдельных операторов INSERT:
conn, _ := pool.Acquire(ctx)
defer conn.Release()
conn.Conn().CopyFrom(ctx, pgx.Identifier{"users"}, []string{"name","email"}, pgx.CopyFromRows(rows))Listen и Notify
pgx поддерживает LISTEN/NOTIFY в PostgreSQL для обмена сообщениями в реальном времени внутри базы данных:
conn, _ := pool.Acquire(ctx)
conn.Exec(ctx, "LISTEN events")
notification, _ := conn.Conn().WaitForNotification(ctx)
fmt.Println(notification.Payload)pgx с database/sql
Используйте pgx как драйвер database/sql для совместимости с существующим кодом на основе sql:
import pgxstdlib "github.com/jackc/pgx/v5/stdlib"
db := sql.OpenDB(pgxstdlib.OpenDBFromPool(pool))pgconn для низкоуровневой работы
pgconn — это низкоуровневая библиотека соединений pgx, предоставляющая доступ к необработанному сетевому протоколу PostgreSQL. Используйте её для работы с пользовательскими протоколами или административными инструментами.
Быстрая проверка
Почему протокол COPY в pgx быстрее нескольких операторов INSERT?
Итоги: pgx
Основные моменты:
- pgxpool для управляемого пула соединений; настройте его с помощью MaxConns
- CollectRows + RowToStructByName для удобного сканирования
- SendBatch для нескольких запросов за один сетевой обмен
- CopyFrom для высокопроизводительной массовой вставки
Часто задаваемые вопросы
Урок «pgx: высокопроизводительный драйвер PostgreSQL» бесплатный?
Да — полный текст урока «pgx: высокопроизводительный драйвер PostgreSQL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «pgx: высокопроизводительный драйвер PostgreSQL»?
pgxpool, протокол Copy и пакетные запросы Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «pgx: высокопроизводительный драйвер PostgreSQL»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- database/sql и драйверы
- sqlx: сканирование структур и именованные запросы
- pgx: высокопроизводительный драйвер PostgreSQL
- Транзакции и миграции