Schnellstart: Verwenden der Sprache Go zum Herstellen einer Verbindung mit einem Azure Database for PostgreSQL-Einzelserver sowie zum Abfragen von Daten

GILT FÜR: Azure Database for PostgreSQL – Single Server

Wichtig

Azure Database for PostgreSQL – Single Server wird eingestellt. Es wird dringend empfohlen, ein Upgrade auf Azure Database for PostgreSQL – Flexibler Server auszuführen. Weitere Informationen zum Migrieren zu Azure Database for PostgreSQL – Flexibler Server finden Sie unter Was geschieht mit Azure Database for PostgreSQL – Einzelserver?.

In dieser Schnellstartanleitung erfahren Sie, wie Sie mit Code in der Sprache Go (golang) eine Verbindung mit einer Azure-Datenbank für PostgreSQL herstellen. Es wird veranschaulicht, wie Sie SQL-Anweisungen zum Abfragen, Einfügen, Aktualisieren und Löschen von Daten in der Datenbank verwenden. In diesem Artikel wird davon ausgegangen, dass Sie mit der Entwicklung unter Verwendung der Sprache Go vertraut sind, aber noch keine Erfahrung mit Azure-Datenbank für PostgreSQL haben.

Voraussetzungen

In diesem Schnellstart werden die Ressourcen, die in den folgenden Anleitungen erstellt wurden, als Startpunkt verwendet:

Installieren von Go und dem pq-Connector

Installieren Sie Go und den reinen Go-Postgres-Treiber (pq) auf Ihrem eigenen Computer. Führen Sie je nach Plattform die geeigneten Schritte aus:

Windows

  1. Laden Sie Go für Microsoft Windows herunter, und installieren Sie es gemäß der Installationsanleitung.

  2. Starten Sie die Eingabeaufforderung über das Startmenü.

  3. Erstellen Sie einen Ordner für Ihr Projekt, z. B. „mkdir %USERPROFILE%\go\src\postgresqlgo“.

  4. Wechseln Sie zum Projektordner. Beispiel: cd %USERPROFILE%\go\src\postgresqlgo.

  5. Legen Sie die Umgebungsvariable für GOPATH so fest, dass sie auf das Quellcodeverzeichnis verweist. set GOPATH=%USERPROFILE%\go.

  6. Installieren Sie den reinen Go-Postgres-Treiber (pq) durch Ausführen des Befehls go get github.com/lib/pq.

    Zusammenfassung: Installieren Sie Go, und führen Sie anschließend an der Eingabeaufforderung die folgenden Befehle aus:

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

Linux (Ubuntu)

  1. Starten Sie die Bash-Shell.

  2. Führen Sie sudo apt-get install golang-go aus, um Go zu installieren.

  3. Erstellen Sie in Ihrem Basisverzeichnis einen Ordner für Ihr Projekt. Beispiel: mkdir -p ~/go/src/postgresqlgo/.

  4. Wechseln Sie zu dem Ordner. Beispiel: cd ~/go/src/postgresqlgo/.

  5. Legen Sie die GOPATH-Umgebungsvariable so fest, dass sie auf ein gültiges Quellverzeichnis verweist (beispielsweise auf den Go-Ordner Ihres aktuellen Basisverzeichnisses). Führen Sie in der Bash-Shell export GOPATH=~/go aus, um das Go-Verzeichnis als GOPATH für die aktuelle Shellsitzung hinzuzufügen.

  6. Installieren Sie den reinen Go-Postgres-Treiber (pq) durch Ausführen des Befehls go get github.com/lib/pq.

    Zusammenfassung: Führen Sie die folgenden Bash-Befehle aus:

    sudo apt-get install golang-go
    mkdir -p ~/go/src/postgresqlgo/
    cd ~/go/src/postgresqlgo/
    export GOPATH=~/go/
    go get github.com/lib/pq
    

macOS (Apple)

  1. Laden Sie Go gemäß der Installationsanleitung für Ihre Plattform herunter, und führen Sie die Installation durch.

  2. Starten Sie die Bash-Shell.

  3. Erstellen Sie in Ihrem Basisverzeichnis einen Ordner für Ihr Projekt. Beispiel: mkdir -p ~/go/src/postgresqlgo/.

  4. Wechseln Sie zu dem Ordner. Beispiel: cd ~/go/src/postgresqlgo/.

  5. Legen Sie die GOPATH-Umgebungsvariable so fest, dass sie auf ein gültiges Quellverzeichnis verweist (beispielsweise auf den Go-Ordner Ihres aktuellen Basisverzeichnisses). Führen Sie in der Bash-Shell export GOPATH=~/go aus, um das Go-Verzeichnis als GOPATH für die aktuelle Shellsitzung hinzuzufügen.

  6. Installieren Sie den reinen Go-Postgres-Treiber (pq) durch Ausführen des Befehls go get github.com/lib/pq.

    Zusammenfassung: Installieren Sie Go, und führen Sie anschließend die folgenden Bash-Befehle aus:

    mkdir -p ~/go/src/postgresqlgo/
    cd ~/go/src/postgresqlgo/
    export GOPATH=~/go/
    go get github.com/lib/pq
    

Abrufen von Verbindungsinformationen

Rufen Sie die Verbindungsinformationen ab, die zum Herstellen einer Verbindung mit der Azure-Datenbank für PostgreSQL erforderlich sind. Sie benötigen den vollqualifizierten Servernamen und die Anmeldeinformationen.

  1. Melden Sie sich beim Azure-Portalan.
  2. Wählen Sie im Azure-Portal im linken Menü Alle Ressourcen aus, und suchen Sie dann nach dem Server, den Sie erstellt haben (z.B. mydemoserver).
  3. Wählen Sie den Servernamen aus.
  4. Notieren Sie sich im Bereich Übersicht des Servers den Servernamen und den Anmeldenamen des Serveradministrators. Wenn Sie Ihr Kennwort vergessen haben, können Sie es in diesem Bereich auch zurücksetzen. Name des Azure Database for PostgreSQL-Servers

Erstellen und Ausführen von Go-Code

  1. Golang-Code kann in einem Nur-Text-Editor wie dem Editor in Microsoft Windows, vi oder Nano (Ubuntu) oder TextEdit (macOS) geschrieben werden. Falls Sie eine umfangreichere interaktive Entwicklungsumgebung (Interactive Development Environment, IDE) bevorzugen, können Sie GoLand von Jetbrains, Visual Studio Code von Microsoft oder Atom verwenden.
  2. Fügen Sie den Golang-Code aus den folgenden Abschnitten in Textdateien ein, und speichern Sie sie in Ihrem Projektordner mit der Dateiendung „*.go“ – beispielsweise %USERPROFILE%\go\src\postgresqlgo\createtable.go (Windows-Pfad) oder ~/go/src/postgresqlgo/createtable.go (Linux-Pfad).
  3. Suchen Sie im Code nach den Konstanten HOST, DATABASE, USER und PASSWORD, und ersetzen Sie die Beispielwerte durch Ihre eigenen Werte.
  4. Starten Sie die Eingabeaufforderung oder die Bash-Shell. Wechseln Sie in das Verzeichnis Ihres Projektordners. Beispiel für Windows: cd %USERPROFILE%\go\src\postgresqlgo\. Beispiel für Linux: cd ~/go/src/postgresqlgo/. Einige der genannten IDE-Umgebungen bieten Debug- und Laufzeitfunktionen ohne Shell-Befehle.
  5. Geben Sie den Befehl go run createtable.go ein, um den Code auszuführen und die Anwendung zu kompilieren und auszuführen.
  6. Falls Sie aus dem Code eine native Anwendung erstellen möchten, führen Sie stattdessen go build createtable.go aus, und starten Sie anschließend createtable.exe, um die Anwendung auszuführen.

Herstellen einer Verbindung und Erstellen einer Tabelle

Verwenden Sie den folgenden Code, um eine Verbindung herzustellen und eine Tabelle zu erstellen, indem Sie eine CREATE TABLE-SQL-Anweisung gefolgt von INSERT INTO-SQL-Anweisungen zum Hinzufügen von Zeilen zur Tabelle nutzen.

Der Code importiert drei Pakete: das sql-Paket, das pq-Paket als Treiber für die Kommunikation mit dem PostgresSQL-Server und das fmt-Paket für die Ein- und Ausgabe in der Befehlszeile.

Mit dem Code wird die sql.Open()-Methode aufgerufen, um eine Verbindung mit der Azure Database for PostgreSQL-Datenbank herzustellen, und die Verbindung wird mit der db.Ping()-Methode überprüft. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Im Code wird die Exec()-Methode mehrfach aufgerufen, um mehrere SQL-Befehle auszuführen. Es wird jedes Mal eine benutzerdefinierte checkError()-Methode verwendet, um das Auftreten eines Fehlers zu überprüfen, und der Vorgang wird beendet, falls dies der Fall ist.

Ersetzen Sie die Parameter HOST, DATABASE, USER und PASSWORD durch Ihre eigenen Werte.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/lib/pq"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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")
}

Lesen von Daten

Verwenden Sie den folgenden Code, um die Daten mit einer SELECT-SQL-Anweisung zu verbinden und zu lesen.

Der Code importiert drei Pakete: das sql-Paket, das pq-Paket als Treiber für die Kommunikation mit dem PostgresSQL-Server und das fmt-Paket für die Ein- und Ausgabe in der Befehlszeile.

Mit dem Code wird die sql.Open()-Methode aufgerufen, um eine Verbindung mit der Azure Database for PostgreSQL-Datenbank herzustellen, und die Verbindung wird mit der db.Ping()-Methode überprüft. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Die SELECT-Abfrage wird ausgeführt, indem die db.Query()-Methode aufgerufen wird, und die sich ergebenden Zeilen werden in einer Variablen vom Typ rows gespeichert. Der Code liest die Spaltendatenwerte in der aktuellen Zeile mit der rows.Scan()-Methode und führt eine Schleife für die Zeilen durch, indem der Iterator rows.Next() verwendet wird, bis keine weiteren Zeilen mehr vorhanden sind. Die Spaltenwerte jeder Zeile werden auf der Konsole ausgegeben. Es wird jedes Mal eine benutzerdefinierte checkError()-Methode verwendet, um das Auftreten eines Fehlers zu überprüfen, und der Vorgang wird beendet, falls dies der Fall ist.

Ersetzen Sie die Parameter HOST, DATABASE, USER und PASSWORD durch Ihre eigenen Werte.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/lib/pq"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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)
		}
	}
}

Aktualisieren von Daten

Verwenden Sie den folgenden Code, um eine Verbindung herzustellen und die Daten mit der SQL-Anweisung UPDATE zu aktualisieren.

Der Code importiert drei Pakete: das sql-Paket, das pq-Paket als Treiber für die Kommunikation mit dem Postgres-Server und das fmt-Paket für die Ein- und Ausgabe in der Befehlszeile.

Mit dem Code wird die sql.Open()-Methode aufgerufen, um eine Verbindung mit der Azure Database for PostgreSQL-Datenbank herzustellen, und die Verbindung wird mit der db.Ping()-Methode überprüft. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Im Code wird die Exec()-Methode aufgerufen, um die SQL-Anweisung auszuführen, mit der die Tabelle aktualisiert wird. Eine benutzerdefinierte checkError()-Methode wird verwendet, um das Auftreten eines Fehlers zu überprüfen, und der Vorgang wird beendet, falls dies der Fall ist.

Ersetzen Sie die Parameter HOST, DATABASE, USER und PASSWORD durch Ihre eigenen Werte.

package main

import (
  "database/sql"
  _ "github.com/lib/pq"
  "fmt"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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")
}

Löschen von Daten

Verwenden Sie den folgenden Code, um die Daten mit einer DELETE-SQL-Anweisung zu verbinden und zu löschen.

Der Code importiert drei Pakete: das sql-Paket, das pq-Paket als Treiber für die Kommunikation mit dem Postgres-Server und das fmt-Paket für die Ein- und Ausgabe in der Befehlszeile.

Mit dem Code wird die sql.Open()-Methode aufgerufen, um eine Verbindung mit der Azure Database for PostgreSQL-Datenbank herzustellen, und die Verbindung wird mit der db.Ping()-Methode überprüft. Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt. Im Code wird die Exec()-Methode aufgerufen, um die SQL-Anweisung auszuführen, die eine Zeile aus der Tabelle löscht. Eine benutzerdefinierte checkError()-Methode wird verwendet, um das Auftreten eines Fehlers zu überprüfen, und der Vorgang wird beendet, falls dies der Fall ist.

Ersetzen Sie die Parameter HOST, DATABASE, USER und PASSWORD durch Ihre eigenen Werte.

package main

import (
  "database/sql"
  _ "github.com/lib/pq"
  "fmt"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "mypgsqldb"
	USER     = "mylogin@mydemoserver"
	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")
}

Bereinigen von Ressourcen

Löschen Sie die Ressourcengruppe mit dem folgenden Befehl, um alle in dieser Schnellstartanleitung verwendeten Ressourcen zu bereinigen:

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

Nächste Schritte