0Pricing
Go Academy · Lekcja

pgx: wysokowydajny sterownik PostgreSQL

pgxpool, protokół Copy i zapytania zbiorcze

pgx: wysokowydajny sterownik PostgreSQL to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Czym jest pgx?

github.com/jackc/pgx/v5 to przeznaczony dla PostgreSQL sterownik Go z natywnym API, który obsługuje zaawansowane funkcje PostgreSQL niedostępne w database/sql: protokół COPY, powiadomienia, buforowanie przygotowanych instrukcji i inne.

Łączenie za pomocą pgx

Należy użyć natywnej puli pgx lub warstwy zgodności z 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 tworzy zarządzaną pulę połączeń. Należy ją skonfigurować za pomocą konfiguracji po analizie:

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

Wykonywanie zapytań za pomocą pgx

pgx używa funkcji pomocniczych pool.Query i 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 mapuje nazwy kolumn na pola struktury, używając nazw pól zapisanych małymi literami lub tagów db, podobnie jak sqlx Select.

Skanowanie pojedynczego wiersza

Należy użyć pool.QueryRow dla zapytań zwracających jeden wiersz:

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

Zapytania wsadowe

pgx obsługuje wysyłanie wielu zapytań w ramach jednego przebiegu sieciowego za pomocą 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()

Protokół COPY

W przypadku masowych wstawień pgx obsługuje binarny protokół COPY PostgreSQL, który jest znacznie szybszy niż pojedyncze instrukcje INSERT:

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

Listen/Notify

pgx obsługuje PostgreSQL LISTEN/NOTIFY na potrzeby komunikacji pub/sub w czasie rzeczywistym w obrębie bazy danych:

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

pgx z database/sql

Należy używać pgx jako sterownika database/sql, aby zachować zgodność z istniejącym kodem opartym na sql:

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

pgconn na potrzeby niskiego poziomu

pgconn to niskopoziomowa biblioteka połączeń pgx udostępniająca surowy protokół komunikacji PostgreSQL. Należy jej używać do pracy z niestandardowym protokołem lub narzędziami administracyjnymi.

Szybki test

Dlaczego protokół COPY pgx jest szybszy niż wiele instrukcji INSERT?

Podsumowanie: pgx

Najważniejsze informacje:

  • pgxpool zapewnia zarządzaną pulę połączeń; należy ją konfigurować za pomocą MaxConns
  • CollectRows + RowToStructByName zapewniają wygodne skanowanie
  • SendBatch służy do wykonywania wielu zapytań w ramach jednego przebiegu sieciowego
  • CopyFrom służy do wysokowydajnych masowych wstawień

Często zadawane pytania

Czy lekcja „pgx: wysokowydajny sterownik PostgreSQL” jest bezpłatna?

Tak — pełny tekst „pgx: wysokowydajny sterownik PostgreSQL” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „pgx: wysokowydajny sterownik PostgreSQL”?

pgxpool, protokół Copy i zapytania zbiorcze Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „pgx: wysokowydajny sterownik PostgreSQL”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. database/sql i sterowniki
  2. sqlx: mapowanie struktur i nazwane zapytania
  3. pgx: wysokowydajny sterownik PostgreSQL
  4. Transakcje i migracje
← Powrót do Go Academy