0Pricing
Go Academy · درس

‏pgx: برنامج تشغيل PostgreSQL عالي الأداء

‏pgxpool وبروتوكول Copy والاستعلامات الدفعية

‏pgx: برنامج تشغيل PostgreSQL عالي الأداء درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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، على نحو مشابه لـ sqlx Select.

فحص صف واحد

استخدموا 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/Notify

يدعم 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 عالي الأداء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏pgx: برنامج تشغيل PostgreSQL عالي الأداء»؟

‏pgxpool وبروتوكول Copy والاستعلامات الدفعية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «‏pgx: برنامج تشغيل PostgreSQL عالي الأداء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏database/sql وبرامج التشغيل
  2. ‏sqlx: فحص البُنى والاستعلامات المسمّاة
  3. ‏pgx: برنامج تشغيل PostgreSQL عالي الأداء
  4. المعاملات والترحيلات
← العودة إلى Go Academy