Поделиться через


Краткое руководство. Использование языка Go для подключения и запроса данных в База данных Azure для PostgreSQL — гибкий сервер

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

В этом кратком руководстве описывается, как подключиться к базе данных Azure для PostgreSQL с помощью кода на языке Go (golang). Здесь также показано, как использовать инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных. В этой статье предполагается, что у вас уже есть опыт разработки на Go, и вы только начали работу с базой данных Azure для PostgreSQL.

Необходимые компоненты

В качестве отправной точки в этом кратком руководстве используются ресурсы, созданные в соответствии со следующими материалами:

Внимание

Для этого краткого руководства рекомендуется использовать сервер с общедоступным доступом (разрешенными IP-адресами ). Использование сервера с закрытым доступом (интеграция с виртуальной сетью) для выполнения этого краткого руководства может включать дополнительные шаги, которые не рассматриваются.

Убедитесь, что IP-адрес, из который вы подключаетесь, был добавлен правила брандмауэра сервера с помощью портал Azure или Azure CLI.

Установка Go и соединителя pq

Установите язык Go и драйвер Pure Go Postgres на своем компьютере. В зависимости от используемой платформы выполните соответствующие действия.

  1. Скачайте и установите Go для Microsoft Windows согласно инструкциям по установке.

  2. Запустите командную строку из меню "Пуск".

  3. Создайте папку для проекта, например mkdir %USERPROFILE%\go\src\postgresqlgo.

  4. Перейдите в папку проекта, например cd %USERPROFILE%\go\src\postgresqlgo.

  5. В качестве значения для переменной среды GOPATH укажите путь к каталогу с исходным кодом. set GOPATH=%USERPROFILE%\go.

  6. Запустите go mod init, чтобы создать модуль в текущем каталоге. Например: go mod init postgresqlgo.

    • Параметр <module_path> обычно обозначает расположение в репозитории GitHub, например github.com/<your_github_account_name>/<directory>.
    • При создании приложения командной строки в качестве теста и публикации приложения <module_path> не требуется ссылаться на фактическое расположение. Например, postgresqlgo.
  7. Установите драйвер Pure Go Postgres (pq) с помощью команды go get github.com/lib/pq.

    Установите Go, а затем выполните следующие команды в командной строке:

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

Получение сведений о подключении

Получите сведения, необходимые для подключения к базе данных Azure.для PostgreSQL. Вам потребуется полное имя сервера и учетные данные для входа.

  1. Войдите на портал Azure.
  2. В меню слева на портале Azure выберите Все ресурсы и выполните поиск по имени созданного сервера (например, mydemoserver).
  3. Выберите имя сервера.
  4. Запишите имя сервера и имя для входа администратора сервера с панели сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой панели.

Сборка и выполнение кода Go

  1. Для написания кода на Golang можно использовать обычный текстовый редактор, например Блокнот в Microsoft Windows, vi или Nano в Ubuntu, а также TextEdit в macOS. Если вы предпочитаете использовать полнофункциональную интегрированную среду разработки, попробуйте GoLand от JetBrains, Visual Studio Code от корпорации Майкрософт или Atom.
  2. Вставьте код Golang из приведенных ниже разделов в текстовые файлы и сохраните их с расширением *.go в папке проекта, например %USERPROFILE%\go\src\postgresqlgo\createtable.go в Windows или ~/go/src/postgresqlgo/createtable.go в Linux.
  3. Найдите константы HOST, DATABASE, USER и PASSWORD в коде и замените приведенные для примера значения своими собственными. База данных с именем postgres создается при создании экземпляра сервера База данных Azure для PostgreSQL. Эту базу данных или другую созданную базу данных можно использовать.
  4. Запустите командную строку или оболочку Bash. Перейдите в папку проекта. В Windows это будет команда cd %USERPROFILE%\go\src\postgresqlgo\, а в Linux — cd ~/go/src/postgresqlgo/. Некоторые из упомянутых сред IDE позволяют выполнять отладку и использовать среду выполнения без применения команд оболочки.
  5. Выполните код с помощью команды go run createtable.go, чтобы скомпилировать и запустить приложение.
  6. Вы также можете создать код в собственном приложении. Для этого введите go build createtable.go, а затем выполните createtable.exe, чтобы запустить приложение.

Подключение и создание таблицы

Используйте приведенный ниже код для подключения и создайте таблицу с помощью инструкции SQL CREATE TABLE. Добавьте строки в таблицу, применив инструкцию SQL INSERT INTO.

Код импортирует три пакета: пакет sql, пакет pq как драйвер для обмена данными с сервером PostgreSQL и пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open() для подключения к базе данных Azure для PostgreSQL, а затем проверяет подключение с помощью метода db.Ping(). Дескриптор базы данных используется для всех компонентов. Он содержит пул подключений к серверу базы данных. Этот код несколько раз вызывает метод Exec() для выполнения нескольких команд SQL. При каждом запуске пользовательский метод checkError() проверяет наличие ошибок и инициирует аварийный выход в случае их обнаружения.

Замените значения параметров HOST, DATABASE, USER и PASSWORD своими значениями.

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

Чтение данных

Используйте указанный ниже код с инструкцией SQL SELECT для подключения и чтения данных.

Код импортирует три пакета: пакет sql, пакет pq как драйвер для обмена данными с сервером PostgreSQL и пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open() для подключения к базе данных Azure для PostgreSQL, а затем проверяет подключение с помощью метода db.Ping(). Дескриптор базы данных используется для всех компонентов. Он содержит пул подключений к серверу базы данных. Запрос выбора выполняется с помощью метода db.Query(), а итоговые строки сохраняются в переменной типа rows. Код считывает из столбцов значения данных в текущей строке с помощью метода rows.Scan(), а затем запускает цикл по строкам, используя итератор сrows.Next(), пока строк больше не останется. Значения столбцов каждой строки печатаются в консоли. Каждый раз, когда используется пользовательский метод checkError(), чтобы проверить, произошла ли ошибка, и паниковать, чтобы выйти, если произошла ошибка.

Замените значения параметров HOST, DATABASE, USER и PASSWORD своими значениями.

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

Обновление данных

Используйте указанный ниже код с инструкцией SQL UPDATE для подключения и обновления данных.

Код импортирует три пакета: пакет sql, пакет pq как драйвер для обмена данными с сервером Postgres и пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open() для подключения к базе данных Azure для PostgreSQL, а затем проверяет подключение с помощью метода db.Ping(). Дескриптор базы данных используется для всех компонентов. Он содержит пул подключений к серверу базы данных. Этот код вызывает метод Exec() для выполнения инструкции SQL, которая обновляет таблицу. Пользовательский метод checkError() используется, чтобы проверить наличие ошибок и инициировать аварийный выход в случае их обнаружения.

Замените значения параметров HOST, DATABASE, USER и PASSWORD своими значениями.

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

Удаление данных

Используйте указанный ниже код с инструкцией SQL DELETE для подключения и удаления данных.

Код импортирует три пакета: пакет sql, пакет pq как драйвер для обмена данными с сервером Postgres и пакет fmt для вывода входных и выходных данных в командной строке.

Код вызывает метод sql.Open() для подключения к базе данных Azure для PostgreSQL, а затем проверяет подключение с помощью метода db.Ping(). Дескриптор базы данных используется для всех компонентов. Он содержит пул подключений к серверу базы данных. Этот код вызывает метод Exec() для выполнения инструкции SQL, которая удаляет строку из таблицы. Пользовательский метод checkError() используется, чтобы проверить наличие ошибок и инициировать аварийный выход в случае их обнаружения.

Замените значения параметров HOST, DATABASE, USER и PASSWORD своими значениями.

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

Очистка ресурсов

Чтобы очистить все ресурсы, используемые во время этого краткого руководства, удалите группу ресурсов с помощью следующей команды:

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

Следующие шаги