Quickstart: استخدم لغة Go للاتصال والاستعلام عن البيانات في قاعدة بيانات Azure لـ PostgreSQL flexible server

يوضح التشغيل السريع كيفية الاتصال بقاعدة بيانات Azure لـ PostgreSQL باستخدام لغة Go (golang). توضح طريقة استخدام عبارات SQL الاستعلام عن البيانات وإدراجها وتحديثها وحذفها في قاعدة البيانات. تفترض هذه المقالة أنك على دراية بالتطوير باستخدام Go، ولكنك جديد في العمل مع قاعدة بيانات Azure لـ PostgreSQL.

Prerequisites

يستخدم هذا التشغيل السريع الموارد التي تم إنشاؤها في إنشاء قاعدة بيانات Azure ل PostgreSQL كنقطة بداية.

Important

استخدم خادما مع تمكين الوصول العام (عناوين IP المسموح بها) لبدء التشغيل السريع هذا. قد يتضمن استخدام خادم مع وصول خاص (تكامل VNet) ممكن لإكمال هذا التشغيل السريع خطوات إضافية غير مشمولة.

تأكد من إضافة عنوان IP الذي تتصل منه إلى قواعد جدار الحماية للخادم باستخدام مدخل Azure أو Azure CLI.

تثبيت Go وموصل pq

تثبيت Go وبرنامج التشغيل Pure Go Postgres (pq) على جهازك. اعتمادًا على نظامك الأساسي، اتبع الخطوات المناسبة:

  1. قم بتنزيل وتثبيت Go لـ Microsoft Windows وفقًا لإرشادات التثبيت.

  2. قم بتشغيل موجه الأوامر من قائمة البدء.

  3. أنشئ مجلدا لمشروعك، مثل mkdir %USERPROFILE%\go\src\postgresqlgo.

  4. قم بتغيير الدليل إلى مجلد المشروع، مثل cd %USERPROFILE%\go\src\postgresqlgo.

  5. قم بتعيين متغير البيئة لـ GOPATH للإشارة إلى دليل التعليمة البرمجية المصدر. set GOPATH=%USERPROFILE%\go.

  6. قم بتشغيل go mod init لإنشاء وحدة نمطية في الدليل الحالي. على سبيل المثال: go mod init postgresqlgo.

    • <module_path> المعلمة هي عموما موقع في مستودع GitHub - مثل github.com/<your_github_account_name>/<directory>.
    • عند إنشاء تطبيق سطر أوامر كاختبار ولن تنشر التطبيق، <module_path> لا يحتاج إلى الإشارة إلى موقع فعلي. على سبيل المثال، postgresqlgo
  7. قم بتثبيت برنامج التشغيل Pure Go Postgres (pq) عن طريق تشغيل الأمر go get github.com/lib/pq.

    باختصار، قم بتثبيت Go، ثم قم بتشغيل هذه الأوامر في موجه الأوامر:

    mkdir  %USERPROFILE%\go\src\postgresqlgo
    cd %USERPROFILE%\go\src\postgresqlgo
    set GOPATH=%USERPROFILE%\go
    go mod init postgresqlgo
    go get github.com/lib/pq
    

الحصول على معلومات الاتصال

الحصول على معلومات الاتصال المطلوبة للاتصال بقاعدة بيانات Azure لـ PostgreSQL. تحتاج إلى اسم الخادم المؤهل بالكامل وبيانات اعتماد المصادقة.

  1. سجّل الدخول إلى مدخل Azure.
  2. من القائمة اليسرى في بوابة Azure، اختر All Resources، ثم ابحث عن الخادم الذي أنشأته (مثل mydemoserver).
  3. حدد اسم الخادم.
  4. من لوحة نظرة عامة على الخادم، دوّن ملاحظة عن اسم الخادم واسم تسجيل دخول مسؤول الخادم. إذا نسيت كلمة المرور، يمكنك أيضًا إعادة تعيين كلمة المرور من هذه اللوحة.

بناء وتشغيل كود Go

  1. لكتابة التعليمات البرمجية Go، استخدم محرر نص عادي، مثل المفكرة في Microsoft Windows أو Nano في Ubuntu أو TextEdit في macOS. إذا كنت تفضل بيئة تطوير تفاعلية أكثر ثراء (IDE)، فجرب GoLand بواسطة JetBrains، تعليمة Visual Studio برمجية بواسطة Microsoft، أو Atom.
  2. الصق التعليمات البرمجية Go من الأقسام التالية في الملفات النصية، واحفظها في مجلد المشروع الخاص بك مع ملحق الملف *.go، مثل مسار %USERPROFILE%\go\src\postgresqlgo\createtable.go Windows أو مسار ~/go/src/postgresqlgo/createtable.goLinux .
  3. حدد موقع الثوابت HOST وDATABASE وUSER وPASSWORD في التعليمات البرمجية، واستبدل نماذج القيم بقيمك الخاصة. عند إنشاء خادم قاعدة بيانات Azure لـ PostgreSQL، يمكنك إنشاء قاعدة بيانات باسم postgres. يمكنك استخدام قاعدة البيانات هذه أو قاعدة بيانات أخرى تقوم بإنشائها.
  4. قم بتشغيل موجه الأوامر أو Bash shell. قم بتغيير الدليل إلى مجلد المشروع الخاص بك. على سبيل المثال، في Windows، استخدم cd %USERPROFILE%\go\src\postgresqlgo\. على Linux، استخدم cd ~/go/src/postgresqlgo/. تقدم بعض بيئات IDE المذكورة إمكانيات التصحيح ووقت التشغيل دون الحاجة إلى أوامر shell.
  5. قم بتشغيل الكود عن طريق كتابة الأمر go run createtable.go لترجمة التطبيق وتشغيله.
  6. بدلا من ذلك، لإنشاء التعليمات البرمجية في تطبيق أصلي، استخدم go build createtable.go. ثم قم بتشغيل createtable.exe لتشغيل التطبيق.

توصيل جدول وإنشائه

استخدم التعليمات البرمجية التالية للاتصال وإنشاء جدول باستخدام عبارة CREATE TABLE SQL، متبوعة عبارات INSERT INTO SQL لإضافة صفوف إلى الجدول.

تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم PostgreSQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

تستدعي التعليمات البرمجية أسلوب sql. افتح () للاتصال بقاعدة بيانات قاعدة بيانات Azure لـ PostgreSQL، وتحقق من الاتصال باستخدام الأسلوب db. Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. التعليمة البرمجية تستدعي طريقة Exec() عدة مرات لتشغيل عدة أوامر SQL. في كل مرة يتحقق أسلوب checkError() المخصص مما إذا حدث خطأ ويذعر للخروج إذا حدث خطأ.

استبدل المعلمات HOST وDATABASE وUSER وPASSWORD بالقيم الخاصة بك.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/lib/pq"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {
	// Initialize connection string.
	var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Drop previous table of same name if one exists.
	_, err = db.Exec("DROP TABLE IF EXISTS inventory;")
	checkError(err)
	fmt.Println("Finished dropping table (if existed)")

	// Create table.
	_, err = db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
	checkError(err)
	fmt.Println("Finished creating table")

	// Insert some data into table.
	sql_statement := "INSERT INTO inventory (name, quantity) VALUES ($1, $2);"
	_, err = db.Exec(sql_statement, "banana", 150)
	checkError(err)
	_, err = db.Exec(sql_statement, "orange", 154)
	checkError(err)
	_, err = db.Exec(sql_statement, "apple", 100)
	checkError(err)
	fmt.Println("Inserted 3 rows of data")
}

قراءة البيانات

استخدم التعليمات البرمجية التالية للاتصال وقراءة البيانات باستخدام عبارة الـ SQL: SELECT.

تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم PostgreSQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

تستدعي التعليمات البرمجية أسلوب sql. افتح () للاتصال بقاعدة بيانات قاعدة بيانات Azure لـ PostgreSQL، وتحقق من الاتصال باستخدام الأسلوب db. Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. يتم تشغيل استعلام التحديد عن طريق استدعاء الأسلوب db. يتم الاحتفاظ بالاستعلام () والصفوف الناتجة في متغير من صفوف النوع. تقرأ التعليمات البرمجية قيم بيانات العمود في الصف الحالي باستخدام صفوف الأسلوب. المسح () والحلقات فوق الصفوف باستخدام صفوف المكرر. Next() حتى لا توجد صفوف أخرى. تتم طباعة قيم عمود كل صف إلى وحدة التحكم. في كل مرة يتم فيها استخدام أسلوب checkError() مخصص للتحقق مما إذا حدث خطأ والذعر للخروج إذا حدث خطأ.

استبدل المعلمات HOST وDATABASE وUSER وPASSWORD بالقيم الخاصة بك.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/lib/pq"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Read rows from table.
	var id int
	var name string
	var quantity int

	sql_statement := "SELECT * from inventory;"
	rows, err := db.Query(sql_statement)
	checkError(err)
	defer rows.Close()

	for rows.Next() {
		switch err := rows.Scan(&id, &name, &quantity); err {
		case sql.ErrNoRows:
			fmt.Println("No rows were returned")
		case nil:
			fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity)
		default:
			checkError(err)
		}
	}
}

تحديث البيانات

استخدم التعليمات البرمجية التالية للاتصال وتحديث البيانات باستخدام عبارة UPDATE SQL.

تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم Postgres، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

تستدعي التعليمات البرمجية أسلوب sql. افتح () للاتصال بقاعدة بيانات قاعدة بيانات Azure لـ PostgreSQL، وتحقق من الاتصال باستخدام الأسلوب db. Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. تقوم التعليمات البرمجية باستدعاء الأسلوب Exec() لتشغيل عبارة SQL تحديث الجدول. يُستخدم أسلوب checkError() مخصص للتحقق مما إذا حدث خطأ ثم الذعر للإنهاء إذا حدث خطأ.

استبدل المعلمات HOST وDATABASE وUSER وPASSWORD بالقيم الخاصة بك.

package main

import (
  "database/sql"
  _ "github.com/lib/pq"
  "fmt"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString string = 
		fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Modify some data in table.
	sql_statement := "UPDATE inventory SET quantity = $2 WHERE name = $1;"
	_, err = db.Exec(sql_statement, "banana", 200)
	checkError(err)
	fmt.Println("Updated 1 row of data")
}

حذف البيانات

استخدم التعليمات البرمجية التالية للاتصال بقاعدة البيانات وحذف البيانات باستخدام عبارة DELETE SQL.

تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم Postgres، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.

تستدعي التعليمات البرمجية أسلوب sql. افتح () للاتصال قاعدة بيانات Azure لـ PostgreSQL، وتحقق من الاتصال باستخدام الأسلوب db. Ping(). يحتوي مقبض قاعدة البيانات على تجمع الاتصال لخادم قاعدة البيانات ويتم استخدامه طوال الوقت. تقوم التعليمات البرمجية باستدعاء الأسلوب Exec() لتشغيل عبارة SQL والتي تحذف صفًّا من الجدول. يتحقق الأسلوب المخصص checkError() من حدوث خطأ ويخرج إذا حدث خطأ.

استبدل المعلمات HOST وDATABASE وUSER وPASSWORD بالقيم الخاصة بك.

package main

import (
  "database/sql"
  _ "github.com/lib/pq"
  "fmt"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString string = 
		fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Delete some data from table.
	sql_statement := "DELETE FROM inventory WHERE name = $1;"
	_, err = db.Exec(sql_statement, "orange")
	checkError(err)
	fmt.Println("Deleted 1 row of data")
}

تنظيف الموارد

لتنظيف كافة الموارد المستخدمة أثناء هذا التشغيل السريع، احذف مجموعة الموارد باستخدام الأمر التالي:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes