Udostępnij za pośrednictwem


Szybki start: nawiązywanie połączeń z danymi w usłudze Azure Database for PostgreSQL i wykonywanie zapytań względem nich za pomocą języka Go — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Ten przewodnik Szybki start przedstawia sposób nawiązywania połączeń 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ć za pomocą języka Go, i dopiero zaczynasz pracę z usługą Azure Database for PostgreSQL.

Wymagania wstępne

Ten przewodnik Szybki start jako punktu wyjścia używa zasobów utworzonych w jednym z tych przewodników:

Ważne

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 reguł zapory serwera przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Instalowanie łączników języków Go i pq

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

  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ą GOPATH, aby wskazywała katalog kodu źródłowego. set GOPATH=%USERPROFILE%\go.

  6. Uruchom polecenie 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>.
    • Gdy tworzysz aplikację wiersza polecenia jako test i nie opublikujesz aplikacji, <module_path> nie trzeba odwoływać się do rzeczywistej lokalizacji. Na przykład postgresqlgo.
  7. Zainstaluj sterownik Pure Go Postgres (pq), uruchamiając polecenie go get github.com/lib/pq.

    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
    

Pobieranie informacji o połączeniu

Uzyskaj parametry połączenia 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ę w witrynie 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. Do pisania kodu w języku Golang można użyć edytora zwykłego tekstu, takiego jak Notatnik w systemie Microsoft Windows, vi 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. Zlokalizuj zmienne HOST, DATABASE, USER i PASSWORD w kodzie i zastąp przykładowe wartości wybranymi samodzielnie 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 wiersz polecenia 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ą możliwości debugowania i uruchamiania bez konieczności używania 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 w celu nawiązania połączenia i utworzenia tabeli za pomocą instrukcji CREATE TABLE języka SQL, a następnie instrukcji INSERT INTO języka SQL, aby dodać wiersze do tabeli.

Kod importuje trzy pakiety: pakiet sql, pakiet pq jako sterownik do komunikacji z serwerem PostgreSQL i 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 jest wywoływana niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy w przypadku wystąpienia błędu.

Zastąp parametry HOST, DATABASE, USER i 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 za pomocą instrukcji SELECT języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet pq jako sterownik do komunikacji z serwerem PostgreSQL i 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. Zapytanie dotyczące instrukcji select jest uruchamiane przez wywołanie metody db.Query(), a wiersze wynikowe są przechowywane w zmiennej typu rows (wiersze). Kod odczytuje wartości danych kolumny danych w bieżącym wierszu przy użyciu metody rows.Scan() i wykonuje operacje dla wierszy w pętli, używając iteratora rows.Next() do momentu, gdy nie ma już kolejnych wierszy. Wartości kolumn każdego wiersza są drukowane w konsoli. Za każdym razem, gdy niestandardowa metoda checkError() jest używana do sprawdzania, czy wystąpił błąd i czy wystąpił błąd, aby zakończyć działanie, jeśli wystąpi błąd.

Zastąp parametry HOST, DATABASE, USER i 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 za pomocą instrukcji UPDATE języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet pq jako sterownik do komunikacji z serwerem Postgres i 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() w celu uruchomienia instrukcji SQL służącej do aktualizowania tabeli. Używana jest niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy w przypadku wystąpienia błędu.

Zastąp parametry HOST, DATABASE, USER i 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 poniższego kodu, aby nawiązać połączenie i usunąć dane za pomocą instrukcji DELETE języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet pq jako sterownik do komunikacji z serwerem Postgres i 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() w celu uruchomienia instrukcji SQL służącej do usuwania wiersza z tabeli. Używana jest niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy w przypadku wystąpienia błędu.

Zastąp parametry HOST, DATABASE, USER i 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")
}

Czyszczenie zasobów

Aby wyczyścić wszystkie zasoby używane w tym przewodniku Szybki start, usuń grupę zasobów przy użyciu następującego polecenia:

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

Następne kroki