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

PLATÍ PRO: Flexibilní server 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. V tomto článku se předpokládá, že máte zkušenosti s vývojem pomocí jazyka Go, ale teprve začínáte pracovat se službou Azure Database for PostgreSQL.

Požadavky

Tento rychlý start jako výchozí bod využívá prostředky vytvořené v některém z těchto průvodců:

Důležité

Pro účely tohoto rychlého startu doporučujeme použít server s povoleným veřejným přístupem (povolené IP adresy ). K dokončení tohoto rychlého startu může být potřeba použít server s povoleným privátním přístupem (integrace virtuální sítě).

Ujistěte se, že ip adresa, ze které se připojujete, byla přidána pravidla brány firewall serveru pomocí webu Azure Portal nebo Azure CLI.

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 váš 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 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. K psaní kódu jazyka Go můžete použít editor prostého textu, jako je Poznámkový blok v systému Microsoft Windows, vi nebo Nano v systému Ubuntu nebo TextEdit v systému 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 od Microsoftu nebo Atomu.
  2. Do textových souborů vložte kód jazyka Go z následujících částí a uložte ho do složky projektu s příponou *.go, například cestu k %USERPROFILE%\go\src\postgresqlgo\createtable.go Windows nebo cestu ~/go/src/postgresqlgo/createtable.gok Linuxu.
  3. V kódu vyhledejte konstanty HOST, DATABASE, USER a PASSWORD a příklady hodnot nahraďte vlastními hodnotami. Databáze s názvem postgres se vytvoří při vytváření instance serveru Azure Database for PostgreSQL. Tuto databázi nebo jinou databázi, kterou jste vytvořili, 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 ve Windows pomocí příkazu cd %USERPROFILE%\go\src\postgresqlgo\. V Linuxu pomocí příkazu 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 modulu runtime, které nevyžadují příkazy prostředí.
  5. Spusťte kód zadáním příkazu go run createtable.go, který aplikaci zkompiluje a spustí.
  6. Alternativně, pokud z kódu chcete sestavit nativní aplikaci, spusťte příkaz go build createtable.go a pak aplikaci spusťte pomocí souboru createtable.exe.

Připojení a vytvoření tabulky

Pomocí následujícího kódu se připojte a vytvořte tabulku s využitím příkazu CREATE TABLE jazyka SQL, po kterém následují příkazy INSERT INTO jazyka 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 pomocí metody db.Ping() zkontroluje stav připojení. 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é vlastní metoda checkError() zkontroluje, jestli nedošlo k chybě, a pokud k nějaké dojde, nouzově kód ukončí.

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 pomocí metody db.Ping() zkontroluje stav připojení. Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Dotaz SELECT se spustí zavoláním metody db.Query() a výsledné řádky se uloží do proměnné typu rows. Kód čte hodnoty dat sloupců na aktuálním řádku pomocí metody rows.Scan() a ve smyčce prochází řádky pomocí iterátoru rows.Next(), dokud nějaké řádky existují. Hodnoty sloupců jednotlivých řádků se vytisknou do konzoly. Pokaždé, když se používá vlastní metoda checkError() ke kontrole, jestli došlo k chybě, a panice, 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")

	// 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 pomocí metody db.Ping() zkontroluje stav připojení. 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 a odstraňte data s využitím příkazu DELETE 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 pomocí metody db.Ping() zkontroluje stav připojení. 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ý odstraní řádek z tabulky. 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")

	// 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čištění prostředků

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

Další kroky