0Pricing
Go Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. database/sql и драйверы
  2. sqlx: сканирование структур и именованные запросы
  3. pgx: высокопроизводительный драйвер PostgreSQL
  4. Транзакции и миграции
← Назад к Go Academy