Compartilhar via


Início Rápido: Usar a linguagem Go para se conectar e consultar dados no Banco de Dados do Azure para PostgreSQL – servidor flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

Este guia de início rápido demonstra como se conectar a um banco de dados do Azure para PostgreSQL usando código escrito na linguagem Go (golang). Ele mostra como usar instruções SQL para consultar, inserir, atualizar e excluir dados no banco de dados. Este artigo pressupõem que você está familiarizado com o desenvolvimento usando Go, mas que começou recentemente a trabalhar com o Banco de Dados do Azure para PostgreSQL.

Pré-requisitos

Este guia de início rápido usa os recursos criados em um destes guias como ponto de partida:

Importante

Recomendamos que você use um servidor com Acesso público (endereços IP permitidos) habilitado para este início rápido. Usar um servidor com acesso privado (integração VNet) habilitado para concluir este início rápido pode envolver etapas extras que não são abordadas.

Verifique se o endereço IP do qual você está se conectando foi adicionado às regras de firewall do servidor usando o portal do Azure ou a CLI do Azure.

Instalar o conector pq e o Go

Instale o Go e o driver de Postgres Go puro(pq) em seu próprio computador. Dependendo da sua plataforma, siga as etapas apropriadas:

  1. Baixe e instale o Go para Microsoft Windows de acordo com as instruções de instalação.

  2. Inicie o prompt de comando no menu Iniciar.

  3. Crie uma pasta para o seu projeto, como mkdir %USERPROFILE%\go\src\postgresqlgo.

  4. Altere o diretório na pasta do projeto, como cd %USERPROFILE%\go\src\postgresqlgo.

  5. Defina a variável de ambiente para GOPATH apontar para o diretório de código de origem. set GOPATH=%USERPROFILE%\go.

  6. Execute o comando go mod init para criar um módulo no diretório atual. Por exemplo: go mod init postgresqlgo.

    • O parâmetro <module_path> geralmente é um local em um repositório do GitHub, tal como github.com/<your_github_account_name>/<directory>.
    • Quando você está criando um aplicativo de linha de comando como teste e não vai publicar o aplicativo, o <module_path> não precisa se referir a um local real. Por exemplo, postgresqlgo.
  7. Instale o driver de Postgres Go puro (pq) executando o comando go get github.com/lib/pq.

    Em resumo, instale o Go e execute esses comandos no prompt de comando:

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

Obter informações de conexão

Obtenha as informações de conexão necessárias para se conectar ao Banco de Dados do Azure para PostgreSQL. Você precisa das credenciais de logon e do nome do servidor totalmente qualificado.

  1. Faça logon no Portal do Azure.
  2. No menu à esquerda no portal do Azure, selecione Todos os recursos e pesquise o servidor que você criou (como mydemoserver).
  3. Selecione o nome do servidor.
  4. No painel Visão Geral do servidor, anote o Nome do servidor e Nome de logon do administrador do servidor. Se você esquecer sua senha, também poderá redefini-la nesse painel.

Compilar e executar o código Go

  1. Para escrever código Golang, você pode usar um editor de texto sem formatação, como o Bloco de Notas no Microsoft Windows, vi ou Nano no Ubuntu ou TextEdit no macOS. Se você preferir um IDE (Ambiente de Desenvolvimento Integrado) mais avançado, experimente o GoLand da Jetbrains, o Visual Studio Code da Microsoft ou o Atom.
  2. Cole o código Golang das seções a seguir em arquivos de texto e salve-os na pasta de projeto com a extensão de arquivo *.go, como caminho do Windows %USERPROFILE%\go\src\postgresqlgo\createtable.go ou caminho do Linux ~/go/src/postgresqlgo/createtable.go.
  3. Localize as constantes HOST, DATABASE, USER, e PASSWORD no código e substitua os valores de exemplo com seus próprios valores. Um banco de dados padrão chamado postgres é criado ao criar a instância do servidor do Banco de Dados do Azure para PostgreSQL. Você pode usar esse banco de dados ou outro que você criou.
  4. Inicie o prompt de comando ou shell Bash. Altere o diretório na pasta do seu projeto. Por exemplo, no Windows cd %USERPROFILE%\go\src\postgresqlgo\. No Linux cd ~/go/src/postgresqlgo/. Alguns dos ambientes IDE mencionados oferecem recursos de depuração e runtime sem a necessidade de comandos do shell.
  5. Execute o código, digitando o comando go run createtable.go para compilar o aplicativo e executá-lo.
  6. Como alternativa, para compilar o código em um aplicativo nativo, go build createtable.go, inicie createtable.exe para executar o aplicativo.

Conectar-se e criar uma tabela

Use o código a seguir para se conectar e criar uma tabela usando a instrução SQL CREATE TABLE, seguida por instruções SQL INSERT INTO para adicionar linhas à tabela.

O código importa três pacotes: o pacote sql, o pacote pq como um driver para se comunicar com o servidor PostgreSQL e o pacote fmt para entrada e saída impressa na linha de comando.

O código chama o método sql. Open () para se conectar ao Banco de Dados do Azure para PostgreSQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Exec() várias vezes para executar vários comandos SQL. Sempre que um método personalizado checkError() verificar se ocorreu um erro e for necessário sair em caso de erro.

Substitua os parâmetros HOST, DATABASE, USER, e PASSWORD pelos seus próprios valores.

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

Ler dados

Use o código a seguir para conectar-se e ler os dados usando uma instrução SQL SELECT.

O código importa três pacotes: o pacote sql, o pacote pq como um driver para se comunicar com o servidor PostgreSQL e o pacote fmt para entrada e saída impressa na linha de comando.

O código chama o método sql. Open () para se conectar ao Banco de Dados do Azure para PostgreSQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. A consulta select é executada chamando o método db.Query(), e as linhas resultantes são mantidas em uma variável do tipo linhas. O código lê a coluna de valores de dados na linha atual usando o método rows.Scan() e loops em relação às linhas usando o iterador rows.Next () até que não haja mais linhas. Os valores de coluna de cada linha são impressos no console de saída. A cada ocorrência, um método personalizado checkError() é usado para verificar se ocorreu um erro e se é necessário sair em caso de erro.

Substitua os parâmetros HOST, DATABASE, USER, e PASSWORD pelos seus próprios valores.

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

Atualizar dados

Use o código a seguir para conectar-se e atualizar os dados usando uma instrução SQL UPDATE.

O código importa três pacotes: o pacote sql, o pacote pq como driver para se comunicar com o servidor Postgres e o fmt pacote para impressão de entrada e saída na linha de comando.

O código chama o método sql. Open () para se conectar ao Banco de Dados do Azure para PostgreSQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Exec() para executar a instrução SQL que atualiza a tabela. Um método personalizado checkError() é usado para verificar se ocorreu um erro e se é necessário sair em caso de erro.

Substitua os parâmetros HOST, DATABASE, USER, e PASSWORD pelos seus próprios valores.

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

Excluir dados

Use o código a seguir para conectar-se e excluir os dados usando uma instrução SQL DELETE.

O código importa três pacotes: o pacote sql, o pacote pq como driver para se comunicar com o servidor Postgres e o fmt pacote para impressão de entrada e saída na linha de comando.

O código chama o método sql. Open () para se conectar ao Banco de Dados do Azure para PostgreSQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Exec() para executar a instrução SQL que exclui uma linha da tabela. Um método personalizado checkError() é usado para verificar se ocorreu um erro e se é necessário sair em caso de erro.

Substitua os parâmetros HOST, DATABASE, USER, e PASSWORD pelos seus próprios valores.

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

Limpar os recursos

Para limpar todos os recursos usados durante este guia de início rápido, exclua o grupo de recursos usando o seguinte comando:

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

Próximas etapas