Guia de início rápido: usar o idioma Go para conectar e consultar dados no Banco de Dados do Azure para PostgreSQL - Servidor Único

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Único

Importante

O Banco de Dados do Azure para PostgreSQL - Servidor Único está no caminho da desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único PostgreSQL?.

Este início rápido explica como se pode ligar a uma Base de Dados do Azure para PostgreSQL através de código escrito na linguagem Go (golang). Explica como utilizar as instruções SQL para consultar, inserir, atualizar e eliminar dados da base de dados. Este artigo pressupõe que esteja familiarizado com o desenvolvimento que utiliza o Go, mas que nunca trabalhou com a base de dados do Azure para PostgreSQL.

Pré-requisitos

Este guia de início rápido utiliza os recursos criados em qualquer um desTes guias como ponto de partida:

Instalar o Go e o conector pq

Instale o Go e o controlador Pure Go Postgres (pq) no seu computador. Dependendo da sua plataforma, siga os passos apropriados:

Windows

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

  2. Inicie a linha de comandos a partir do menu Iniciar.

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

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

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

  6. Execute o comando go get github.com/lib/pq para instalar o controlador Pure Go Postgres (pq).

    Para resumir, instale o Go e, em seguida, execute estes comandos na linha de comandos:

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

Linux (Ubuntu)

  1. Inicie a shell de Bash.

  2. Execute sudo apt-get install golang-go para instalar o Go.

  3. Crie uma pasta para o projeto no seu diretório raiz, como mkdir -p ~/go/src/postgresqlgo/.

  4. Altere o diretório para a pasta, como cd ~/go/src/postgresqlgo/.

  5. Defina a variável de ambiente GOPATH para apontar para um diretório de origem válido, como a pasta do go do diretório raiz atual. Na shell do bash, execute export GOPATH=~/go para adicionar o diretório do go como o GOPATH da sessão de shell atual.

  6. Execute o comando go get github.com/lib/pq para instalar o controlador Pure Go Postgres (pq).

    Em resumo, execute estes comandos do bash:

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

Apple macOS

  1. Transfira e instale o Go em conformidade com as instruções de instalação da sua plataforma.

  2. Inicie a shell de Bash.

  3. Crie uma pasta para o projeto no seu diretório raiz, como mkdir -p ~/go/src/postgresqlgo/.

  4. Altere o diretório para a pasta, como cd ~/go/src/postgresqlgo/.

  5. Defina a variável de ambiente GOPATH para apontar para um diretório de origem válido, como a pasta do go do diretório raiz atual. Na shell do bash, execute export GOPATH=~/go para adicionar o diretório do go como o GOPATH da sessão de shell atual.

  6. Execute o comando go get github.com/lib/pq para instalar o controlador Pure Go Postgres (pq).

    Em resumo, instale o Go e execute estes comandos do bash:

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

Obter informações da ligação

Obtenha as informações de ligação necessárias para se ligar à Base de Dados do Azure para PostgreSQL. Necessita do nome do servidor e das credenciais de início de sessão totalmente qualificados.

  1. Inicie sessão no portal do Azure.
  2. No menu à esquerda no portal do Azure, selecione Todos os recursos e procure o servidor que você criou (como mydemoserver).
  3. Selecione o nome do servidor.
  4. No painel Descrição geral do servidor, tome nota do Nome do servidor e do Nome de início de sessão de administrador do servidor. Caso se esqueça da sua palavra-passe, também pode repor a palavra-passe neste painel. Nome do servidor da Base de Dados do Azure para PostgreSQL

Criar e executar código Go

  1. Para escrever o código Golang, pode utilizar um editor de textos simples, como o Bloco de Notas no Microsoft Windows, o vi ou o Nano no Ubuntu ou o TextEdit em macOS. Se preferir um ambiente de desenvolvimento interativo (IDE) mais rico, experimente o GoLand by Jetbrains, o Visual Studio Code da Microsoft ou o Atom.
  2. Cole o código Golang das seguintes seções em arquivos de texto e salve na pasta do projeto com a extensão de arquivo *.go, como caminho %USERPROFILE%\go\src\postgresqlgo\createtable.go do Windows ou caminho ~/go/src/postgresqlgo/createtable.godo Linux .
  3. Localize as constantes HOST, DATABASE, USER e PASSWORD no código e substitua os valores de exemplo pelos seus próprios valores.
  4. Inicie a linha de comandos ou a shell de bash. Altere o diretório para a pasta do projeto . Por exemplo, no Windows cd %USERPROFILE%\go\src\postgresqlgo\. No Linux, cd ~/go/src/postgresqlgo/. Alguns dos ambientes IDE mencionados oferecem capacidades de depuração e runtime sem que sejam necessários comandos da shell.
  5. Execute o código com o comando go run createtable.go, para compilar a aplicação e executá-la.
  6. Em alternativa, para criar o código numa aplicação nativa, go build createtable.go, e inicie createtable.exe para executar a aplicação.

Ligar-se e criar uma tabela

Utilize o código seguinte para ligar e criar uma tabela com a instrução SQL CREATE TABLE, seguida das instruções SQL INSERT INTO para adicionar linhas à tabela.

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

O código chama o método sql.Open() para ligar à base de dados da Base de Dados do Azure para PostgreSQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o métodoExec() várias vezes para executar vários comandos SQL. Sempre que seja chamado um método checkError() personalizado verifica se ocorreu um erro e pânico para sair se ocorrer um 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 = "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")
}

Ler dados

Utilize o código seguinte para se ligar e ler dados com uma instrução SQL SELECT.

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

O código chama o método sql.Open() para ligar à base de dados da Base de Dados do Azure para PostgreSQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. A consulta select é executada ao chamar o método db.Query() e as linhas resultantes são mantidas numa variável do tipo rows. O código lê os valores de dados de coluna na linha atual através do método rows.Scan() e cria ciclos nas linhas através do iterador rows.Next() até não existirem mais linhas. Os valores das colunas de cada linha são impressos no console. Cada vez que um método checkError() personalizado é usado para verificar se ocorreu um erro e entrar em pânico para sair se um erro ocorrer.

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

Atualizar dados

Utilize o código seguinte para se ligar e atualizar os dados com uma instrução SQL UPDATE.

O código importa três pacotes: o pacote sql, o pacote pq como um controlador para comunicar com o servidor Postgres e o pacote fmt para entrada e saída de dados impressos na linha de comandos.

O código chama o método sql.Open() para ligar à base de dados da Base de Dados do Azure para PostgreSQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Exec() para executar a instrução SQL que atualiza a tabela. É utilizado um método checkError() personalizado para verificar se ocorreu um erro e pânico para sair se ocorrer um 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 = "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")
}

Eliminar dados

Utilize o código seguinte para se ligar e eliminar os dados com a instrução SQL DELETE.

O código importa três pacotes: o pacote sql, o pacote pq como um controlador para comunicar com o servidor Postgres e o pacote fmt para entrada e saída de dados impressos na linha de comandos.

O código chama o método sql.Open() para ligar à base de dados da Base de Dados do Azure para PostgreSQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Exec() para executar a instrução SQL que elimina uma linha da tabela. É utilizado um método checkError() personalizado para verificar se ocorreu um erro e pânico para sair se ocorrer um 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 = "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")
}

Clean up resources (Limpar recursos)

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

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

Próximos passos