このクイックスタートでは、Go 言語 (golang) で記述されたコードを使用して、Azure Database for PostgreSQL に接続する方法を紹介します。 ここでは、SQL ステートメントを使用してデータベース内のデータを照会、挿入、更新、削除する方法を説明します。 この記事では、Go を使用した開発に慣れているものの、Azure Database for PostgreSQLを初めて使用することを前提としています。
[前提条件]
このクイック スタートでは、「 Azure Database for PostgreSQL の作成 」で作成したリソースを出発点として使用します。
Important
このクイック スタートでは、 パブリック アクセス (許可された IP アドレス) が有効になっているサーバーを使用します。 プライベート アクセス (VNET 統合) が有効になっているサーバーを使って、このクイックスタートを終えるには、説明されていない追加の手順が必要になる場合があります。
Azure ポータルまたはAzure CLIを使用して、接続先の IP アドレスがサーバーのファイアウォール規則に追加されていることを確認します。
Go と pq コネクタのインストール
Go と純粋な Go postgres ドライバー (pq) を自分のコンピューターにインストールします。 プラットフォームに応じて、該当する手順に従ってください。
スタート メニューからコマンド プロンプトを起動します。
mkdir %USERPROFILE%\go\src\postgresqlgoなど、プロジェクトのフォルダーを作成します。ディレクトリをプロジェクト フォルダーに変更します (例:
cd %USERPROFILE%\go\src\postgresqlgo)。GOPATH の環境変数がソース コード ディレクトリをポイントするように設定します。
set GOPATH=%USERPROFILE%\go。go mod init を実行して、現在のディレクトリにモジュールを作成します。 たとえば、
go mod init postgresqlgoと指定します。-
<module_path>パラメーターは、通常、GitHub リポジトリ内の場所 (github.com/<your_github_account_name>/<directory>など) です。 - テストとしてコマンド ライン アプリを作成していて、アプリを発行しない場合、
<module_path>は実際の場所を参照する必要はありません。 たとえば、「postgresqlgo」のように入力します。
-
コマンドを実行して、
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 Database for PostgreSQL に接続するために必要な接続情報を取得します。 完全修飾ドメイン名(FQDN)と認証情報が必要です。
- Azure portal にログインします。
- Azure portal の左側のメニューから [ すべてのリソース] を選択し、作成したサーバー ( mydemoserver など) を検索します。
- サーバー名を選択します。
- サーバーの [概要] パネルから、[サーバー名] と [サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。
Go コードのビルドと実行
- Go コードを記述するには、Microsoft Windowsのメモ帳、Ubuntu の Nano、macOS の TextEdit などのプレーンテキスト エディターを使用します。 より豊富な対話型開発環境 (IDE) を使用する場合は、GoLand by JetBrains、Microsoft でVisual Studio Code、または Atom をお試しください。
- 次のセクションの Go コードをテキスト ファイルに貼り付け、Windows パス
%USERPROFILE%\go\src\postgresqlgo\createtable.goや Linux パス~/go/src/postgresqlgo/createtable.goなど、ファイル拡張子 *.go を含むプロジェクト フォルダーに保存します。 - コード内で
HOST、DATABASE、USER、およびPASSWORDの定数を見つけて、サンプルの値を独自の値で置き換えます。 Azure Database for PostgreSQL サーバーを作成するときは、postgres という名前のデータベースを作成します。 そのデータベースまたは作成した別のデータベースを使用できます。 - コマンド プロンプトまたは Bash シェルを起動します。 ディレクトリをプロジェクト フォルダーに変更します。 たとえば、Windowsでは、
cd %USERPROFILE%\go\src\postgresqlgo\を使用します。 Linux では、cd ~/go/src/postgresqlgo/を使用します。 前述した一部の IDE 環境では、シェル コマンドを必要とせずに、デバッグとランタイムの機能が提供されています。 - コマンド「
go run createtable.go」を入力してコードを実行し、アプリケーションをコンパイルして実行します。 - または、コードをネイティブ アプリケーションにビルドするには、
go build createtable.goを使用します。 次に、createtable.exeを起動してアプリケーションを実行します。
接続とテーブルの作成
CREATE TABLE SQL ステートメントを使用してテーブルを接続して作成し、その後 に INSERT INTO SQL ステートメントを使用してテーブルに行を追加するには、次のコードを使用します。
このコードでは、3 つのパッケージをインポートします。sql パッケージ、PostgreSQL サーバーと通信するためのドライバーである pq パッケージ、コマンド ラインで入力と出力を表示するための fmt パッケージです。
このコードは、Azure Database for PostgreSQL データベースに接続するためにメソッド sql.Open() を呼び出し、メソッド db.Ping() を使用して接続を確認します。 データベース ハンドルが全体を通して使用され、データベース サーバーの接続プールが保持されます。 このコードでは、複数の SQL コマンドを実行するために Exec() メソッドを数回呼び出しています。 カスタムの checkError() メソッドは、その都度エラーが発生したかどうかを確認し、エラーが発生している場合は panic を発生させて終了します。
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")
}
データの読み取り
接続し、SELECT SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。
このコードでは、3 つのパッケージをインポートします。sql パッケージ、PostgreSQL サーバーと通信するためのドライバーである pq パッケージ、コマンド ラインで入力と出力を表示するための fmt パッケージです。
このコードでは、Azure Database for PostgreSQL データベースに接続するためにメソッド sql.Open() を呼び出し、メソッド db.Ping() を使用して接続を確認します。 データベース ハンドルが全体を通して使用され、データベース サーバーの接続プールが保持されます。 SELECT クエリは、メソッド db.Query() を呼び出して実行され、その結果の行は rows 型の変数に保持されます。 このコードでは、メソッド rows.Scan() を使用して現在の行の列データ値を読み取り、それ以上行が存在しなくなるまで、イテレーター rows.Next() を使用して行を順に処理します。 各行の列の値がコンソールに出力されます。 毎回、エラーが発生したかどうかがカスタム checkError() メソッドを使用してチェックされ、エラーが発生した場合は panic によってプログラムが終了します。
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)
}
}
}
データの更新
接続し、UPDATE SQL ステートメントを使用してデータを更新するには、次のコードを使用します。
このコードでは、3 つのパッケージをインポートします。sql パッケージ、Postgres サーバーと通信するためのドライバーである pq パッケージ、コマンド ラインで入力と出力を表示するための fmt パッケージです。
このコードは、Azure Database for PostgreSQL に接続するためにメソッド sql.Open() を呼び出し、メソッド db.Ping() を使用して接続を確認します。 データベース ハンドルが全体を通して使用され、データベース サーバーの接続プールが保持されます。 このコードでは、テーブルを更新する SQL ステートメントを実行するために Exec() メソッドを呼び出しています。 エラーが発生したかどうかがカスタム checkError() メソッドを使用してチェックされ、エラーが発生した場合は panic によってプログラムが終了します。
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")
}
データの削除
次のコードを使用してデータベースに接続し、DELETE SQL ステートメントを使用してデータを 削除 します。
このコードでは、3 つのパッケージをインポートします。sql パッケージ、Postgres サーバーと通信するためのドライバーである pq パッケージ、コマンド ラインで入力と出力を表示するための fmt パッケージです。
このコードは、Azure Database for PostgreSQL に接続するためにメソッド sql.Open() を呼び出し、メソッド db.Ping() を使用して接続を確認します。
データベース ハンドルは、データベース サーバーの接続プールを保持し、全体で使用されます。 このコードでは、テーブルから行を削除する SQL ステートメントを実行するために Exec() メソッドを呼び出しています。 カスタム 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
関連コンテンツ
- Azure portal を使用して Azure Database for PostgreSQL を管理します。
- クイック スタート: Python を使用して、Azure Database for PostgreSQL のデータに接続してクエリを実行します。
- クイック スタート: Java を使用して Azure Database for PostgreSQL に接続し、データのクエリを実行します。
- クイック スタート: .NET (C#) を使用して、Azure Database for PostgreSQL に接続し、データのクエリを実行します。
- クイック スタート: PHP を使用して Azure Database for PostgreSQL に接続し、データのクエリを実行します。
- クイック スタート: Azure CLI を使用して、Azure Database for PostgreSQL に接続し、データのクエリを実行します。
- クイック スタート: Power BI で Azure Database for PostgreSQL からデータをインポートします。