快速入門:使用 Go 程式設計語言,連線至適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器及查詢其資料
適用於: 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
本快速入門示範如何使用以 Go 語言 (golang) 撰寫的程式碼來連線到 Azure Database for PostgreSQL。 它會顯示如何使用 SQL 陳述式來查詢、插入、更新和刪除資料庫中的資料。 本文假設您已熟悉使用 Go 進行開發,但不熟悉 Azure Database for PostgreSQL。
必要條件
本快速入門使用建立 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器實例中建立的資源作為起點。
重要
建議您針對本快速入門使用已啟用公用存取權 (允許的 IP 位址) 的伺服器。 若使用已啟用私人存取權 (VNET 整合) 的伺服器完成本快速入門,可能需要用到未涵蓋的額外步驟。
確保您用於連線的 IP 位址已使用 Azure 入口網站或 Azure CLI 新增伺服器的防火牆規則。
安裝 Go 和 pq 連接器
在您自己的機器上安裝 Go 和 Pure Go Postgres 驅動程式 (pq)。 根據您的平台,遵循適當的步驟:
從 [開始] 功能表啟動命令提示字元。
為您的專案產生資料夾,例如
mkdir %USERPROFILE%\go\src\postgresqlgo
。將目錄切換到專案資料夾,例如
cd %USERPROFILE%\go\src\postgresqlgo
。將 GOPATH 環境變數設定為指向來源程式碼目錄。
set GOPATH=%USERPROFILE%\go
.執行 go mod init,在目前的目錄建立模組。 例如:
go mod init postgresqlgo
。- 參數
<module_path>
通常是 GitHub 存放庫內的位置,例如github.com/<your_github_account_name>/<directory>
。 - 您要建立命令列應用程式作為測試,而且不會發佈應用程式時,
<module_path>
不需要參考實際位置。 例如:postgresqlgo
。
- 參數
執行
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 mod init postgresqlgo go get github.com/lib/pq
取得連線資訊
取得連線到 Azure Database for PostgreSQL 所需的連線資訊。 您需要完整的伺服器名稱和登入認證。
- 登入 Azure 入口網站。
- 從 Azure 入口網站的左側功能表中,選取 [所有資源],然後搜尋您所建立的伺服器 (例如 mydemoserver)。
- 選取伺服器名稱。
- 從伺服器的 [概觀] 面板,記下 [伺服器名稱] 和 [伺服器管理員登入名稱]。 如果您忘記密碼,您也可以從此面板重設密碼。
建置並執行 Go 程式碼
- 若要撰寫 Golang 程式碼,您可以使用純文字編輯器,例如 Microsoft Windows 的記事本、Ubuntu 的 vi 或 Nano,或 macOS 的 TextEdit。 如果想要使用更豐富的互動式開發環境 (IDE),可以選擇 Jetbrains 的 GoLand \(英文\)、Microsoft 的 Visual Studio Code \(英文\),或 Atom \(英文\)。
- 將下列各節的 Golang 程式碼貼到文字檔中,並加上副檔名 *.go 來儲存到專案資料夾,例如 Windows 路徑
%USERPROFILE%\go\src\postgresqlgo\createtable.go
或 Linux 路徑~/go/src/postgresqlgo/createtable.go
。 - 在程式碼中找出
HOST
、DATABASE
、USER
和PASSWORD
常數,然後將範例值換成您自己的值。 建立適用於 PostgreSQL 的 Azure 資料庫伺服器執行個體時,會建立名為 postgres 的資料庫。 您可以使用該資料庫或另一個您建立的資料庫。 - 啟動命令提示字元或 bash 殼層。 將目錄切換到專案資料夾。 例如,在 Windows 上為
cd %USERPROFILE%\go\src\postgresqlgo\
。 在 Linux 上為cd ~/go/src/postgresqlgo/
。 提及的部分 IDE 環境提供偵錯和執行階段功能,並不需要殼層命令。 - 輸入命令
go run createtable.go
來編譯應用程式並加以執行,以執行程式碼。 - 或者,若要將程式碼建置到原生應用程式
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
、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")
}
讀取資料
使用下列程式碼搭配 SELECT SQL 陳述式來連線和讀取資料。
程式碼會匯入三個封裝:sql 套件、pq 封裝 會作為驅動程式來與 PostgreSQL 伺服器通訊,而 fmt 封裝會用於命令列上的列印輸入和輸出。
程式碼會呼叫 sql.Open() 方法來連線至適用於 PostgreSQL 的 Azure 資料庫,並使用 db.Ping() 方法檢查連線。 資料庫控制代碼會到處使用,並保留資料庫伺服器的連線集區。 呼叫 db.Query() 方法可執行 select 查詢,而結果產生的資料列會保留在類型為 rows 的變數中。 程式碼會使用 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 = "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 套件、pq 套件作為驅動程式來與 Postgres 伺服器通訊,以及 fmt 套件 (適用於命令列上列印的輸入和輸出)。
程式碼會呼叫 sql.Open() 方法來連線至適用於 PostgreSQL 的 Azure 資料庫,並使用 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 套件、pq 套件作為驅動程式來與 Postgres 伺服器通訊,以及 fmt 套件 (適用於命令列上列印的輸入和輸出)。
程式碼會呼叫 sql.Open() 方法來連線至適用於 PostgreSQL 的 Azure 資料庫,並使用 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
相關內容
- 管理 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。
- 快速入門:使用 Python 從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的實例連線和查詢數據。
- 快速入門:使用 Java 從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的實例連線和查詢數據。
- 快速入門:使用 .NET (C#) 從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的實例連線和查詢數據。
- 快速入門:使用 PHP 從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的實例連線和查詢數據。
- 快速入門:使用 Azure CLI 從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的實例連線和查詢數據。
- 快速入門:從 適用於 PostgreSQL 的 Azure 資料庫 匯入數據 - Power BI 中的彈性伺服器。