Udostępnij za pomocą


Szybki start: nawiązywanie połączeń i wykonywanie zapytań dotyczących danych w usłudze Azure Database for PostgreSQL przy użyciu języka Go

W tym przewodniku Quickstart demonstrujemy, jak nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu kodu napisanego w języku Go (golang). Pokazano w nim, jak używać instrukcji języka SQL w celu wysyłania zapytań o dane oraz wstawiania, aktualizowania i usuwania danych w bazie danych. W tym artykule założono, że wiesz już, jak programować przy użyciu języka Go, ale dopiero zaczynasz pracę z usługą Azure Database for PostgreSQL.

Prerequisites

Ten przewodnik szybkiego startu używa zasobów utworzonych w temacie Tworzenie bazy danych w usłudze Azure Database for PostgreSQL jako punktu początkowego.

Important

W tym przewodniku Szybki start zalecamy używanie serwera z dostępem publicznym (dozwolonymi adresami IP). Wykonanie tego przewodnika Szybki start przy użyciu serwera z dostępem prywatnym (integracja z siecią wirtualną) może obejmować dodatkowe kroki, które nie zostały omówione.

Upewnij się, że adres IP, z którego nawiązujesz połączenie, został dodany do reguł zapory serwera przy użyciu Azure Portal lub Azure CLI.

Zainstaluj Go i konektor pq

Zainstaluj język Go i sterownik Pure Go Postgres (pq) na własnej maszynie. W zależności od platformy wykonaj odpowiednie kroki:

  1. Pobierz i zainstaluj środowisko języka Go dla systemu Microsoft Windows zgodnie z instrukcjami dotyczącymi instalacji.

  2. Uruchom wiersz polecenia z menu Start.

  3. Utwórz folder dla projektu, np. mkdir %USERPROFILE%\go\src\postgresqlgo.

  4. Przejdź do folderu projektu, np. cd %USERPROFILE%\go\src\postgresqlgo.

  5. Ustaw zmienną środowiskową dla goPATH, aby wskazywała katalog kodu źródłowego. set GOPATH=%USERPROFILE%\go.

  6. Uruchom go mod init, aby utworzyć moduł w bieżącym katalogu. Na przykład: go mod init postgresqlgo.

    • Parametr <module_path> jest zazwyczaj lokalizacją w repozytorium GitHub — takim jak github.com/<your_github_account_name>/<directory>.
    • Jeśli tworzysz aplikację wiersza polecenia na potrzeby testu i nie zamierzasz jej publikować, <module_path> nie musi odwoływać się do rzeczywistej lokalizacji. Na przykład postgresqlgo.
  7. Zainstaluj sterownik Pure Go Postgres (pq), uruchamiając go get github.com/lib/pq polecenie .

    Podsumowując: zainstaluj środowisko języka Go, a następnie uruchom następujące polecenia w wierszu polecenia:

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

Uzyskaj informacje o połączeniu

Uzyskaj informacje o połączeniu potrzebne do nawiązania połączenia z usługą Azure Database for PostgreSQL. Potrzebna jest w pełni kwalifikowana nazwa serwera i poświadczenia logowania.

  1. Zaloguj się do witryny Azure Portal.
  2. W menu po lewej stronie w witrynie Azure Portal wybierz pozycję Wszystkie zasoby, a następnie wyszukaj utworzony serwer (na przykład mydemoserver).
  3. Wybierz nazwę serwera.
  4. Po przejściu do panelu Przegląd serwera zanotuj nazwę serwera i nazwę logowania administratora serwera. Jeśli zapomnisz hasła, możesz również je zresetować z poziomu tego panelu.

Kompilowanie i uruchamianie kodu języka Go

  1. Aby napisać kod języka Golang, możesz użyć edytora zwykłego tekstu, takiego jak Notatnik w systemie Microsoft Windows lub Nano w systemie Ubuntu lub TextEdit w systemie macOS. Jeśli wolisz bogatsze interaktywne środowisko projektowe (IDE) wypróbuj usługę GoLand firmy Jetbrains, program Visual Studio Code firmy Microsoft lub Atom.
  2. Wklej kod języka Golang z poniższych sekcji do plików tekstowych i zapisz go w folderze projektu z rozszerzeniem pliku *.go, takim jak ścieżka %USERPROFILE%\go\src\postgresqlgo\createtable.go systemu Windows lub ścieżka systemu ~/go/src/postgresqlgo/createtable.goLinux.
  3. HOSTZnajdź stałe , DATABASE, USERi PASSWORD w kodzie i zastąp przykładowe wartości własnymi wartościami. Baza danych o nazwie postgres jest tworzona podczas tworzenia wystąpienia serwera usługi Azure Database for PostgreSQL. Możesz użyć tej bazy danych lub innej utworzonej bazy danych.
  4. Uruchom konsolę poleceń lub powłokę Bash. Przejdź do folderu projektu. Na przykład w systemie Windows uruchom polecenie cd %USERPROFILE%\go\src\postgresqlgo\. W systemie Linux: cd ~/go/src/postgresqlgo/. Niektóre z wymienionych środowisk IDE oferują funkcję debugowania i funkcję uruchamiania bez konieczności wykonywania poleceń powłoki.
  5. Uruchom kod, wpisując polecenie go run createtable.go, aby skompilować aplikację i uruchomić ją.
  6. Alternatywnie, aby skompilować kod w aplikację natywną, uruchom polecenie go build createtable.go, a następnie uruchom plik createtable.exe w celu uruchomienia aplikacji.

Łączenie i tworzenie tabeli

Użyj poniższego kodu, aby nawiązać połączenie i utworzyć tabelę przy użyciu instrukcji CREATE TABLE SQL, a następnie instrukcje INSERT INTO SQL, aby dodać wiersze do tabeli.

Kod importuje trzy pakiety: pakiet SQL, pakiet pq jako sterownik do komunikacji z serwerem PostgreSQL oraz pakiet fmt dla drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open(), aby nawiązać połączenie z bazą danych usługi Azure Database for PostgreSQL i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Exec() kilka razy, aby uruchomić kilka poleceń SQL. Za każdym razem, gdy niestandardowa metoda checkError() sprawdza, czy wystąpił błąd, oraz w przypadku jego wystąpienia wywołuje panic i kończy działanie.

Zastąp HOSTparametry , DATABASE, USERi PASSWORD własnymi wartościami.

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

Odczyt danych

Użyj poniższego kodu, aby nawiązać połączenie i odczytać dane przy użyciu instrukcji SELECT JĘZYKA SQL.

Kod importuje trzy pakiety: pakiet SQL, pakiet pq jako sterownik do komunikacji z serwerem PostgreSQL oraz pakiet fmt dla drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open() w celu nawiązania połączenia z bazą danych Azure Database for PostgreSQL i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Zapytanie SELECT jest uruchamiane przez wywołanie metody db.Query(), a wynikowe wiersze są przechowywane w zmiennej typu rows. Kod odczytuje wartości danych z kolumn w bieżącym wierszu przy użyciu metody rows.Scan() i iteruje po wierszach przy użyciu iteratora rows.Next(), aż nie będzie więcej wierszy. Wartości kolumn każdego wiersza są drukowane na standardowe wyjście konsoli. Za każdym razem używana jest niestandardowa metoda checkError() do sprawdzenia, czy wystąpił błąd, i zakończenia działania w przypadku jego wykrycia.

Zastąp HOSTparametry , DATABASE, USERi PASSWORD własnymi wartościami.

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

Aktualizowanie danych

Użyj poniższego kodu, aby nawiązać połączenie i zaktualizować dane przy użyciu instrukcji UPDATE JĘZYKA SQL.

Kod importuje trzy pakiety: pakiet SQL, pakiet pq jako sterownik do komunikacji z serwerem Postgres oraz pakiet fmt dla drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open() w celu nawiązania połączenia z bazą danych Azure Database for PostgreSQL i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Exec(), aby uruchomić instrukcję SQL, która aktualizuje tabelę. Niestandardowa metoda checkError() służy do sprawdzania, czy wystąpił błąd, i wykonania funkcji "panic" w celu zakończenia działania, jeśli błąd wystąpi.

Zastąp HOSTparametry , DATABASE, USERi PASSWORD własnymi wartościami.

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

Usuwanie danych

Użyj następującego kodu, aby nawiązać połączenie i usunąć dane przy użyciu instrukcji DELETE języka SQL.

Kod importuje trzy pakiety: pakiet SQL, pakiet pq jako sterownik do komunikacji z serwerem Postgres oraz pakiet fmt dla drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open() w celu nawiązania połączenia z bazą danych usługi Azure Database for PostgreSQL i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Exec(), aby uruchomić instrukcję SQL, która usuwa wiersz z tabeli. Niestandardowa metoda checkError() służy do sprawdzania, czy wystąpił błąd, i wykonania funkcji "panic" w celu zakończenia działania, jeśli błąd wystąpi.

Zastąp HOSTparametry , DATABASE, USERi PASSWORD własnymi wartościami.

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

Uprzątnij zasoby

Aby wyczyścić wszystkie zasoby używane w tym samouczku Quickstart, usuń grupę zasobów za pomocą następującego polecenia:

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