0Pricing
Go Academy · Lezione

pgx: driver PostgreSQL ad alte prestazioni

pgxpool, protocollo Copy e query in batch

pgx: driver PostgreSQL ad alte prestazioni è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Che cos'è pgx?

github.com/jackc/pgx/v5 è un driver Go specifico per PostgreSQL, dotato di un'API nativa che supporta funzionalità avanzate di PostgreSQL non disponibili in database/sql: protocollo COPY, notifiche, memorizzazione nella cache delle istruzioni preparate e altro.

Connessione con pgx

Utilizzi il pool nativo di pgx o il livello di compatibilità con 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 crea un pool di connessioni gestito. Lo configuri con una configurazione analizzata:

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

Esecuzione di query con pgx

pgx utilizza le funzioni helper pool.Query e 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 associa i nomi delle colonne ai campi delle struct utilizzando i nomi dei campi in minuscolo o i tag db, in modo simile a sqlx Select.

Analisi di una singola riga

Utilizzi pool.QueryRow per le query che restituiscono una singola riga:

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

Query in batch

pgx supporta l'invio di più query in un singolo round trip di rete utilizzando 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()

Protocollo COPY

Per gli inserimenti in blocco, pgx supporta il protocollo COPY binario di PostgreSQL, molto più veloce delle singole istruzioni INSERT:

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

Listen/Notify

pgx supporta LISTEN/NOTIFY di PostgreSQL per il pub/sub in tempo reale all'interno del database:

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

pgx con database/sql

Utilizzi pgx come driver database/sql per garantire la compatibilità con il codice esistente basato su sql:

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

pgconn per operazioni di basso livello

pgconn è la libreria di connessione di basso livello di pgx che espone il protocollo wire grezzo di PostgreSQL. La utilizzi per operazioni con protocolli personalizzati o strumenti di amministrazione.

Verifica rapida

Perché il protocollo COPY di pgx è più veloce di più istruzioni INSERT?

Riepilogo: pgx

Punti chiave:

  • pgxpool per un pool di connessioni gestito; configurarlo con MaxConns
  • CollectRows + RowToStructByName per un'analisi più intuitiva
  • SendBatch per più query in un singolo round trip
  • CopyFrom per inserimenti in blocco ad alto throughput

Domande Frequenti

La lezione «pgx: driver PostgreSQL ad alte prestazioni» è gratuita?

Sì — il testo completo di «pgx: driver PostgreSQL ad alte prestazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «pgx: driver PostgreSQL ad alte prestazioni»?

pgxpool, protocollo Copy e query in batch Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «pgx: driver PostgreSQL ad alte prestazioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. database/sql e driver
  2. sqlx: scansione delle struct e query con nome
  3. pgx: driver PostgreSQL ad alte prestazioni
  4. Transazioni e migrazioni
← Torna a Go Academy