0Pricing
Go Academy · บทเรียน

pgx: ไดรเวอร์ PostgreSQL ประสิทธิภาพสูง

pgxpool โปรโตคอล Copy และคิวรีแบบกลุ่ม

pgx: ไดรเวอร์ PostgreSQL ประสิทธิภาพสูง เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 สร้างกลุ่มการเชื่อมต่อที่มีการจัดการ กำหนดค่าด้วยการแยกวิเคราะห์การกำหนดค่า:

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/การแจ้งเตือน

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 ประสิทธิภาพสูง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “pgx: ไดรเวอร์ PostgreSQL ประสิทธิภาพสูง”

pgxpool โปรโตคอล Copy และคิวรีแบบกลุ่ม คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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