0Pricing
Go Academy · Lektion

pgx: PostgreSQL-Treiber für hohe Leistung

pgxpool, Copy-Protokoll und Batch-Abfragen

pgx: PostgreSQL-Treiber für hohe Leistung ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist pgx?

github.com/jackc/pgx/v5 ist ein PostgreSQL-spezifischer Go-Treiber mit einer nativen API, die erweiterte PostgreSQL-Funktionen unterstützt, die in database/sql nicht verfügbar sind: COPY-Protokoll, Benachrichtigungen, Caching vorbereiteter Anweisungen und mehr.

Mit pgx verbinden

Verwenden Sie den nativen Pool von pgx oder die Kompatibilitätsschicht für 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 erstellt einen verwalteten Verbindungspool. Konfigurieren Sie ihn mit einer Parse-Konfiguration:

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

Abfragen mit pgx

pgx verwendet pool.Query und die Hilfsfunktionen 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 ordnet Spaltennamen Struct-Feldern anhand von kleingeschriebenen Feldnamen oder db-Tags zu, ähnlich wie sqlx Select.

Eine einzelne Zeile einlesen

Verwenden Sie pool.QueryRow für Abfragen mit einer einzelnen Zeile:

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

Batch-Abfragen

pgx unterstützt das Senden mehrerer Abfragen in einem einzigen Netzwerk-Roundtrip mit 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-Protokoll

Für Masseneinfügungen unterstützt pgx das binäre COPY-Protokoll von PostgreSQL, das deutlich schneller ist als einzelne INSERT-Anweisungen:

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

Listen/Notify

pgx unterstützt LISTEN/NOTIFY von PostgreSQL für Echtzeit-Pub/Sub innerhalb der Datenbank:

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

pgx mit database/sql

Verwenden Sie pgx als database/sql-Treiber, um die Kompatibilität mit bestehendem sql-basiertem Code zu gewährleisten:

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

pgconn für Low-Level-Zugriff

pgconn ist die Low-Level-Verbindungsbibliothek von pgx, die das unverarbeitete PostgreSQL-Drahtprotokoll offenlegt. Verwenden Sie sie für benutzerdefinierte Protokollarbeit oder Admin-Tools.

Kurzer Test

Warum ist das COPY-Protokoll von pgx schneller als mehrere INSERT-Anweisungen?

Zusammenfassung: pgx

Wichtige Punkte:

  • pgxpool für einen verwalteten Verbindungspool; mit MaxConns konfigurieren
  • CollectRows + RowToStructByName für komfortables Einlesen
  • SendBatch für mehrere Abfragen in einem Roundtrip
  • CopyFrom für Masseneinfügungen mit hohem Durchsatz

Häufig gestellte Fragen

Ist die Lektion „pgx: PostgreSQL-Treiber für hohe Leistung“ kostenlos?

Ja — der vollständige Text von „pgx: PostgreSQL-Treiber für hohe Leistung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „pgx: PostgreSQL-Treiber für hohe Leistung“?

pgxpool, Copy-Protokoll und Batch-Abfragen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „pgx: PostgreSQL-Treiber für hohe Leistung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. database/sql und Treiber
  2. sqlx: Struct-Scanning und benannte Abfragen
  3. pgx: PostgreSQL-Treiber für hohe Leistung
  4. Transaktionen und Migrationen
← Zurück zu Go Academy