التشغيل السريع: استخدام لغة Go للاتصال والاستعلام عن البيانات في قاعدة بيانات Azure لـ PostgreSQL - خادم واحد

ينطبق على: قاعدة بيانات Azure لـ PostgreSQL - خادم واحد

هام

قاعدة بيانات Azure ل PostgreSQL - خادم واحد على مسار التقاعد. نوصي بشدة بالترقية إلى Azure Database for PostgreSQL - Flexible Server. لمزيد من المعلومات حول الترحيل إلى قاعدة بيانات Azure ل PostgreSQL - خادم مرن، راجع ما يحدث لقاعدة بيانات Azure لخادم PostgreSQL الفردي؟.

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

المتطلبات الأساسية

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

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

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

Windows

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

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

  3. قم بعمل مجلد لمشروعك مثل mkdir %USERPROFILE%\go\src\postgresqlgo.

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

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

  6. قم بتثبيت برنامج التشغيل 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 get github.com/lib/pq
    

Linux (Ubuntu)

  1. قم بتشغيل Bash shell.

  2. قم بتثبيت Go عن طريق تشغيل sudo apt-get install golang-go.

  3. أنشئ مجلدًا لمشروعك في الدليل الرئيسي، مثل mkdir -p ~/go/src/postgresqlgo/.

  4. قم بتغيير الدليل إلى المجلد، مثل cd ~/go/src/postgresqlgo/.

  5. اضبط متغير بيئة GOPATH للإشارة إلى دليل مصدر صالح، مثل مجلد go في الدليل الرئيسي الحالي. في Bash shell، قم بتشغيل export GOPATH=~/go لإضافة دليل go كـ GOPATH لجلسة shell الحالية.

  6. قم بتثبيت برنامج التشغيل Pure Go Postgres (pq) عن طريق تشغيل الأمر go get github.com/lib/pq.

    باختصار، قم بتشغيل أوامر bash التالية:

    sudo apt-get install golang-go
    mkdir -p ~/go/src/postgresqlgo/
    cd ~/go/src/postgresqlgo/
    export GOPATH=~/go/
    go get github.com/lib/pq
    

Apple macOS

  1. قم بتنزيل وتثبيت Go وفقًا لـ إرشادات التثبيت المطابقة لنظامك الأساسي.

  2. قم بتشغيل Bash shell.

  3. أنشئ مجلدًا لمشروعك في الدليل الرئيسي، مثل mkdir -p ~/go/src/postgresqlgo/.

  4. قم بتغيير الدليل إلى المجلد، مثل cd ~/go/src/postgresqlgo/.

  5. اضبط متغير بيئة GOPATH للإشارة إلى دليل مصدر صالح، مثل مجلد go في الدليل الرئيسي الحالي. في Bash shell، قم بتشغيل export GOPATH=~/go لإضافة دليل go كـ GOPATH لجلسة shell الحالية.

  6. قم بتثبيت برنامج التشغيل Pure Go Postgres (pq) عن طريق تشغيل الأمر go get github.com/lib/pq.

    باختصار، قم بتثبيت Go، ثم قم بتشغيل أوامر bash التالية:

    mkdir -p ~/go/src/postgresqlgo/
    cd ~/go/src/postgresqlgo/
    export GOPATH=~/go/
    go get github.com/lib/pq
    

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

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

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

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

  1. لكتابة التعليمة البرمجية لـ Golang، يمكنك استخدام محرر نصوص بسيط، مثل Notepad في Microsoft Windows أو vi أو Nano في Ubuntu أو TextEdit في macOS. إذا كنت تفضل بيئة تطوير تفاعلية أكثر ثراءً، فجرّب GoLand بواسطة Jetbrains أو Visual Studio Code من Microsoft أوAtom.
  2. ألصق تعليمة Golang البرمجية من الأقسام أدناه في ملفات نصية، ثم احفظها في مجلد المشروع الخاص بك بامتداد الملف *.go (مثل مسار Windows %USERPROFILE%\go\src\postgresqlgo\createtable.go أو مسار Linux ~/go/src/postgresqlgo/createtable.go).
  3. حدد موقع الثوابت HOST وDATABASE وUSER وPASSWORD في التعليمات البرمجية، واستبدل نماذج القيم بقيمك الخاصة.
  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.Open() للاتصال بقاعدة بيانات 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 = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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.

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

يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات PostgreSQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. يتم تشغيل استعلام التحديد عن طريق استدعاء db.Query()، ويتم الاحتفاظ بالصفوف الناتجة في متغير من نوع الصفوف. تقرأ التعليمات البرمجية قيم بيانات العمود في الصف الحالي باستخدام rows.Scan() والحلقات عبر الصفوف باستخدام rows.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 = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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)
		}
	}
}

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

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

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

يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات 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 = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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")
}

حذف البيانات

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

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

يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات 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 = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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

الخطوات التالية