快速入門:使用 Go 語言來連線和查詢 適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器中的數據

適用於:適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器位於淘汰路徑上。 強烈建議您升級至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。 如需移轉至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的詳細資訊,請參閱單一伺服器 適用於 PostgreSQL 的 Azure 資料庫 發生什麼事?

本快速入門示範如何使用以 Go 語言 (golang) 撰寫的程式代碼連線到 適用於 PostgreSQL 的 Azure 資料庫。 它會顯示如何使用 SQL 陳述式來查詢、插入、更新和刪除資料庫中的資料。 本文假設您已熟悉使用 Go 進行開發,但不熟悉 適用於 PostgreSQL 的 Azure 資料庫。

必要條件

本快速入門使用在以下任一指南中建立的資源作為起點︰

安裝 Go 和 pq 連接器

您自己的計算機上安裝 GoPure Go Postgres 驅動程式 (pq)。 根據您的平臺,請遵循適當的步驟:

Windows

  1. 根據安裝指示下載並安裝 Go for Microsoft Windows。

  2. 從 [開始] 選單啟動命令提示字元。

  3. 為您的專案建立資料夾,例如 mkdir %USERPROFILE%\go\src\postgresqlgo

  4. 將目錄變更為項目資料夾,例如 cd %USERPROFILE%\go\src\postgresqlgo

  5. 將 GOPATH 的環境變數設定為指向原始碼目錄。 set GOPATH=%USERPROFILE%\go.

  6. 執行 go get github.com/lib/pq 命令以安裝 Pure Go Postgres 驅動程式 (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殼層。

  2. 執行 sudo apt-get install golang-go以安裝 Go。

  3. 在主目錄中為您的專案建立資料夾,例如 mkdir -p ~/go/src/postgresqlgo/

  4. 將目錄變更為資料夾,例如 cd ~/go/src/postgresqlgo/

  5. 將 GOPATH 環境變數設定為指向有效的來源目錄,例如您目前主目錄的 go 資料夾。 在bash殼層中,執行 export GOPATH=~/go 以將go目錄新增為目前殼層會話的 GOPATH。

  6. 執行 go get github.com/lib/pq 命令以安裝 Pure Go Postgres 驅動程式 (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殼層。

  3. 在主目錄中為您的專案建立資料夾,例如 mkdir -p ~/go/src/postgresqlgo/

  4. 將目錄變更為資料夾,例如 cd ~/go/src/postgresqlgo/

  5. 將 GOPATH 環境變數設定為指向有效的來源目錄,例如您目前主目錄的 go 資料夾。 在bash殼層中,執行 export GOPATH=~/go 以將go目錄新增為目前殼層會話的 GOPATH。

  6. 執行 go get github.com/lib/pq 命令以安裝 Pure Go Postgres 驅動程式 (pq)。

    總而言之,安裝 Go,然後執行下列 bash 命令:

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

取得連線資訊

取得連線至 適用於 PostgreSQL 的 Azure 資料庫 所需的連線資訊。 您需要完整的伺服器名稱和登入認證。

  1. 登入 Azure 入口網站
  2. 從 Azure 入口網站的左側功能表中,選取 [所有資源],然後搜尋您所建立的伺服器 (例如 mydemoserver)。
  3. 選取伺服器名稱。
  4. 從伺服器的 [概觀] 面板,記下 [伺服器名稱] 和 [伺服器管理員登入名稱]。 如果您忘記密碼,您也可以從此面板重設密碼。 適用於 PostgreSQL 的 Azure 資料庫 伺服器名稱

建置並執行 Go 程式代碼

  1. 若要撰寫 Golang 程式代碼,您可以使用純文字編輯器,例如 Microsoft Windows 中的 記事本、Ubuntu 中的 viNano,或在 macOS 中使用 TextEdit。 如果您偏好更豐富的互動式開發環境(IDE),請嘗試 Jetbrains、Visual Studio Code by Microsoft 或 Atom 的 GoLand。
  2. 將下列各節中的 Golang 程式代碼貼到文字檔中,並將擴展名為 *.go 的項目資料夾儲存,例如 Windows 路徑 %USERPROFILE%\go\src\postgresqlgo\createtable.go 或 Linux 路徑 ~/go/src/postgresqlgo/createtable.go
  3. 在程式 HOST代碼中找出 、 DATABASEUSERPASSWORD 常數,並以您自己的值取代範例值。
  4. 啟動命令提示字元或bash殼層。 將目錄變更為您的項目資料夾。 例如,在 Windows cd %USERPROFILE%\go\src\postgresqlgo\上。 在 Linux cd ~/go/src/postgresqlgo/上。 提及的一些 IDE 環境提供偵錯和運行時間功能,而不需要殼層命令。
  5. 輸入 命令 go run createtable.go 以編譯應用程式並加以執行,以執行程序代碼。
  6. 或者,若要將程式代碼建置至原生應用程式, go build createtable.go請啟動 createtable.exe 以執行應用程式。

連線及建立資料表

使用下列程序代碼,使用 CREATE TABLE SQL 語句連接及建立數據表,後面接著 INSERT INTO SQL 語句,以將數據列加入數據表中。

程式代碼會匯入三個套件: sql 套件pq 套件 作為與 PostgreSQL 伺服器通訊的驅動程式,以及 命令行上列印輸入和輸出的 fmt 套件

程序代碼會呼叫 sql 方法。Open() 連接到 適用於 PostgreSQL 的 Azure 資料庫 資料庫,並使用 方法 db 檢查連線。Ping(). 整個資料庫句柄都會使用,並存放資料庫伺服器的連接集區。 程序代碼會呼叫 Exec() 方法數次,以執行數個 SQL 命令。 每次自定義 checkError() 方法檢查錯誤是否發生,如果發生錯誤,就會發生緊急狀況以結束。

HOST您自己的值取代、 DATABASEUSER、 和 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")
}

讀取資料

使用下列程序代碼,使用 SELECT SQL 語句連接和讀取數據。

程式代碼會匯入三個套件: sql 套件pq 套件 作為與 PostgreSQL 伺服器通訊的驅動程式,以及 命令行上列印輸入和輸出的 fmt 套件

程序代碼會呼叫 sql 方法。Open() 連接到 適用於 PostgreSQL 的 Azure 資料庫 資料庫,並使用 方法 db 檢查連線。Ping(). 整個資料庫句柄都會使用,並存放資料庫伺服器的連接集區。 選取查詢是藉由呼叫 方法 db 來執行。Query()和產生的數據列會保留在類型 數據列的變數中。 程序代碼會使用方法數據列,讀取目前數據列中的數據行數據值。使用反覆運算器數據列來掃描和循環數據列。Next() 直到沒有其他數據列存在為止。 每個數據列的數據行值都會列印到主控台輸出。每次使用自定義 checkError() 方法來檢查是否發生錯誤,並在發生錯誤時發生緊急狀況結束。

HOST您自己的值取代、 DATABASEUSER、 和 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)
		}
	}
}

更新資料

使用下列程序代碼,使用 UPDATE SQL語句連接及更新資料。

程式代碼會匯入三個套件: sql 套件pq 套件 作為與 Postgres 伺服器通訊的驅動程式,以及 命令行上列印輸入和輸出的 fmt 套件

程序代碼會呼叫 sql 方法。Open() 連接到 適用於 PostgreSQL 的 Azure 資料庫 資料庫,並使用 方法 db 檢查連線。Ping(). 整個資料庫句柄都會使用,並存放資料庫伺服器的連接集區。 程式代碼會呼叫 Exec() 方法來執行更新資料表的 SQL 語句。 自定義 checkError() 方法可用來檢查是否發生錯誤,並在發生錯誤時發生緊急狀況結束。

HOST您自己的值取代、 DATABASEUSER、 和 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")
}

刪除資料

使用下列程式代碼,使用 DELETE SQL 語句連接和刪除資料。

程式代碼會匯入三個套件: sql 套件pq 套件 作為與 Postgres 伺服器通訊的驅動程式,以及 命令行上列印輸入和輸出的 fmt 套件

程序代碼會呼叫 sql 方法。Open() 連接到 適用於 PostgreSQL 的 Azure 資料庫 資料庫,並使用 方法 db 檢查連線。Ping(). 整個資料庫句柄都會使用,並存放資料庫伺服器的連接集區。 程式代碼會呼叫 Exec() 方法來執行從資料表中刪除資料列的 SQL 語句。 自定義 checkError() 方法可用來檢查是否發生錯誤,並在發生錯誤時發生緊急狀況結束。

HOST您自己的值取代、 DATABASEUSER、 和 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

下一步