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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- database/sql และไดรเวอร์
- sqlx: การสแกนสตรักต์และคิวรีแบบตั้งชื่อ
- pgx: ไดรเวอร์ PostgreSQL ประสิทธิภาพสูง
- ธุรกรรมและการย้ายโครงสร้างฐานข้อมูล