Rychlý start: Použití jazyka Go k připojení a dotazování dat na flexibilním serveru Azure Database for PostgreSQL

Tento rychlý start ukazuje, jak se připojit ke službě Azure Database for PostgreSQL pomocí kódu napsaného v jazyce Go (Golang). Ukazuje, jak pomocí příkazů jazyka SQL dotazovat, vkládat, aktualizovat a odstraňovat data v databázi. Tento článek předpokládá, že máte zkušenosti s vývojem pomocí Jazyka Go, ale začínáte pracovat s Azure Database for PostgreSQL.

Požadavky

V tomto rychlém průvodci jsou jako výchozí bod použity prostředky vytvořené ve službě Azure Database for PostgreSQL.

Důležité

Pro účely tohoto rychlého startu použijte server s povoleným veřejným přístupem (povolené IP adresy ). K dokončení této rychlé příručky může být potřeba použít server s povoleným privátním přístupem (integrací virtuální sítě), což může zahrnovat další kroky, které nejsou pokryty.

Pomocí portálu Azure nebo Azure CLI se ujistěte, že IP adresa, ze které se připojujete, je přidána do pravidel brány firewall serveru.

Instalace jazyka Go a konektoru pq

Nainstalujte na svém počítači jazyk Go a ovladač Pure Go Postgres (pq). V závislosti na vaší platformě postupujte podle příslušných kroků:

  1. Stáhněte a nainstalujte jazyk Go pro Microsoft Windows podle pokynů k instalaci.

  2. Z nabídky Start spusťte příkazový řádek.

  3. Vytvořte složku pro projekt, například mkdir %USERPROFILE%\go\src\postgresqlgo.

  4. Změňte adresář na složku projektu, například cd %USERPROFILE%\go\src\postgresqlgo.

  5. Nastavte proměnnou prostředí GOPATH tak, aby odkazovala na adresář se zdrojovým kódem. set GOPATH=%USERPROFILE%\go.

  6. Spuštěním příkazu go mod init vytvořte modul v aktuálním adresáři. Například: go mod init postgresqlgo.

    • Parametr <module_path> je obecně umístění v úložišti GitHubu , například github.com/<your_github_account_name>/<directory>.
    • Když vytváříte aplikaci příkazového řádku jako test a aplikaci nepublikujete, <module_path> nemusí odkazovat na skutečné umístění. Například: postgresqlgo.
  7. Nainstalujte ovladač Pure Go Postgres (pq) spuštěním příkazu go get github.com/lib/pq.

    Stručně řečeno, nainstalujte jazyk Go a potom na příkazovém řádku spusťte následující příkazy:

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

Získání informací o připojení

Získejte informace o připojení potřebné pro připojení ke službě Azure Database for PostgreSQL. Potřebujete plně kvalifikovaný název serveru a ověřovací přihlašovací údaje.

  1. Přihlaste se k webu Azure Portal.
  2. V nabídce vlevo na webu Azure Portal vyberte Všechny prostředky a vyhledejte server, který jste vytvořili (například mydemoserver).
  3. Vyberte název serveru.
  4. Na panelu Přehled serveru si poznamenejte Název serveru a Přihlašovací jméno správce serveru. Pokud zapomenete své heslo, můžete ho na tomto panelu také resetovat.

Sestavení a spuštění kódu jazyka Go

  1. Pokud chcete napsat kód Go, použijte editor prostého textu, například Poznámkový blok v Microsoft Windows, Nano v Ubuntu nebo TextEdit v macOS. Pokud dáváte přednost bohatšímu interaktivnímu vývojovému prostředí (IDE), vyzkoušejte GoLand by JetBrains, Visual Studio Code Microsoft nebo Atom.
  2. Vložte kód Go z následujících částí do textových souborů a uložte je do složky projektu s příponou *.go, například cesta ve Windows %USERPROFILE%\go\src\postgresqlgo\createtable.go nebo cesta v Linuxu ~/go/src/postgresqlgo/createtable.go.
  3. V kódu vyhledejte konstanty HOST, DATABASE, USER a PASSWORD a příklady hodnot nahraďte vlastními hodnotami. Při vytváření Azure Database for PostgreSQL serveru vytvoříte databázi s názvem postgres. Tuto databázi nebo jinou databázi, kterou vytvoříte, můžete použít.
  4. Spusťte příkazový řádek nebo prostředí Bash. Změňte adresář na složku vašeho projektu. Například na Windows použijte cd %USERPROFILE%\go\src\postgresqlgo\. V Linuxu použijte cd ~/go/src/postgresqlgo/. Některá ze zmíněných integrovaných vývojových prostředí (IDE) nabízejí možnosti ladění a spuštění, které nevyžadují příkazového řádku.
  5. Spusťte kód zadáním příkazu go run createtable.go, který aplikaci zkompiluje a spustí.
  6. Případně pokud chcete kód sestavit do nativní aplikace, použijte go build createtable.go. Potom spusťte createtable.exe, aby se aplikace spustila.

Připojení a vytvoření tabulky

Pomocí následujícího kódu se připojte a vytvořte tabulku pomocí příkazu CREATE TABLE SQL a potom příkazy INSERT INTO SQL, které do tabulky přidají řádky.

Kód importuje tři balíčky: balíček sql, balíček pq jako ovladač pro komunikaci se serverem PostgreSQL a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení k databázi Azure Database for PostgreSQL a připojení ověří pomocí metody db.Ping(). Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Kód několikrát volá metodu Exec() pro spuštění několika příkazů jazyka SQL. Pokaždé, když vlastní metoda checkError() zkontroluje, jestli došlo k chybě, a zpanikaří, aby se ukončila, pokud dojde k chybě.

Nahraďte parametry HOST, DATABASE, USER a PASSWORD vlastními hodnotami.

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")
}

Čtení dat

Pomocí následujícího kódu se připojte a načtěte data s využitím příkazu SELECT jazyka SQL.

Kód importuje tři balíčky: balíček sql, balíček pq jako ovladač pro komunikaci se serverem PostgreSQL a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení k databázi Azure Database for PostgreSQL a připojení ověřuje pomocí metody db.Ping(). Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Dotaz SELECT se spustí voláním metody db.Query() a výsledné řádky se uloží do proměnné typu rows. Kód načte hodnoty dat ve sloupcích aktuálního řádku pomocí metody rows.Scan() a prochází řádky pomocí iterátoru rows.Next(), dokud existují další řádky. Hodnoty sloupců každého řádku se vytisknou do konzoly. Pokaždé se používá vlastní metoda checkError() ke kontrole, zda došlo k chybě, a pokud ano, vyvolá panic a ukončí běh programu.

Nahraďte parametry HOST, DATABASE, USER a PASSWORD vlastními hodnotami.

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)
		}
	}
}

Aktualizace dat

Pomocí následujícího kódu se připojte a aktualizujte data s využitím příkazu UPDATE jazyka SQL.

Kód importuje tři balíčky: balíček sql, balíček pq jako ovladač pro komunikaci se serverem Postgres a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení k databázi Azure Database for PostgreSQL a ověřuje připojení pomocí metody db.Ping(). Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Kód volá metodu Exec() pro spuštění příkazu jazyka SQL, který aktualizuje tabulku. Pomocí vlastní metody checkError() se zkontroluje, jestli nedošlo k chybě, a pokud k nějaké dojde, kód se nouzově ukončí.

Nahraďte parametry HOST, DATABASE, USER a PASSWORD vlastními hodnotami.

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")
}

Odstranění dat

Pomocí následujícího kódu se připojte k databázi a odstraňte data pomocí příkazu DELETE SQL.

Kód importuje tři balíčky: balíček sql, balíček pq jako ovladač pro komunikaci se serverem Postgres a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení k Azure Database for PostgreSQL a ověřuje připojení pomocí metody db.Ping(). Obslužný objekt databáze uchovává fond připojení k databázovému serveru a používá se v celém kódu. Kód volá metodu Exec() pro spuštění příkazu jazyka SQL, který odstraní řádek z tabulky. Vlastní checkError() metoda zkontroluje, jestli došlo k chybě, a ukončí, pokud dojde k chybě.

Nahraďte parametry HOST, DATABASE, USER a PASSWORD vlastními hodnotami.

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")
}

Vyčistěte zdroje

Pokud chcete vyčistit všechny prostředky použité během tohoto rychlého startu, odstraňte skupinu prostředků pomocí následujícího příkazu:

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