0Pricing
Go Academy · Aula

pgx: driver de alto desempenho para PostgreSQL

pgxpool, protocolo Copy e consultas em lote

pgx: driver de alto desempenho para PostgreSQL é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

O que é pgx?

github.com/jackc/pgx/v5 é um controlador Go específico do PostgreSQL, com uma API nativa que oferece suporte a recursos avançados do PostgreSQL indisponíveis em database/sql: protocolo COPY, notificações, armazenamento em cache de instruções preparadas e muito mais.

Conectando com pgx

Use o pool nativo do pgx ou a camada de compatibilidade com 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 cria um pool de conexões gerenciado. Configure-o com uma configuração analisada:

config, _ := pgxpool.ParseConfig("postgres://...")
config.MaxConns = 10
pool, _ := pgxpool.NewWithConfig(ctx, config)

Consultando com pgx

pgx usa pool.Query e as funções auxiliares 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 mapeia nomes de colunas para campos de estruturas usando nomes de campos em minúsculas ou tags db, de forma semelhante a Select do sqlx.

Lendo uma única linha

Use pool.QueryRow para consultas de uma única linha:

var name string
err := pool.QueryRow(ctx, "SELECT name FROM users WHERE id=$1", id).Scan(&name)

Consultas em lote

pgx oferece suporte ao envio de várias consultas em uma única ida e volta pela rede usando 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()

Protocolo COPY

Para inserções em massa, pgx oferece suporte ao protocolo COPY binário do PostgreSQL, que é muito mais rápido do que instruções INSERT individuais:

conn, _ := pool.Acquire(ctx)
defer conn.Release()
conn.Conn().CopyFrom(ctx, pgx.Identifier{"users"}, []string{"name","email"}, pgx.CopyFromRows(rows))

Listen/Notify

pgx oferece suporte a LISTEN/NOTIFY do PostgreSQL para publicação/assinatura em tempo real dentro do banco de dados:

conn, _ := pool.Acquire(ctx)
conn.Exec(ctx, "LISTEN events")
notification, _ := conn.Conn().WaitForNotification(ctx)
fmt.Println(notification.Payload)

pgx com database/sql

Use pgx como um controlador de database/sql para manter a compatibilidade com códigos existentes baseados em sql:

import pgxstdlib "github.com/jackc/pgx/v5/stdlib"
db := sql.OpenDB(pgxstdlib.OpenDBFromPool(pool))

pgconn para operações de baixo nível

pgconn é a biblioteca de conexão de baixo nível do pgx, que expõe o protocolo de comunicação bruto do PostgreSQL. Use-a para trabalhar com protocolos personalizados ou criar ferramentas administrativas.

Verificação rápida

Por que o protocolo COPY do pgx é mais rápido do que várias instruções INSERT?

Recapitulação: pgx

Pontos principais:

  • pgxpool para um pool de conexões gerenciado; configure-o com MaxConns
  • CollectRows + RowToStructByName para uma leitura conveniente
  • SendBatch para várias consultas em uma única ida e volta
  • CopyFrom para inserções em massa de alto desempenho

Perguntas Frequentes

A aula “pgx: driver de alto desempenho para PostgreSQL” é grátis?

Sim — o texto completo de “pgx: driver de alto desempenho para PostgreSQL” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “pgx: driver de alto desempenho para PostgreSQL”?

pgxpool, protocolo Copy e consultas em lote Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “pgx: driver de alto desempenho para PostgreSQL”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. database/sql e drivers
  2. sqlx: leitura de structs e consultas nomeadas
  3. pgx: driver de alto desempenho para PostgreSQL
  4. Transações e migrações
← Voltar para Go Academy