🍎
GoでクラウドDB(Aiven)に接続する
概要
GoでクラウドDBを使用する方法を紹介します。
ElephantSQLがサービス終了するにあたって、代替として公式サイトで紹介されていたAivenを使用することにしました。
Aivenの登録
下記のサイトでアカウント登録します。
-
Projects → CreateProjectで任意の名前でプロジェクトを作成します。
-
プロジェクト作成後、詳細画面に進み、Service URI コピーしておきます。(こちらが接続情報になります)
Goの実装
フォルダ構成およびソースコードはこちら
DBの接続設定
"DATABASE_URL"
には先ほどコピーしておいたService URIを.envファイルに記述しておきます。Getenvにより.envファイルを読みこんでくれます。
database.go
package initializers
import (
"log"
"os"
"github.com/joho/godotenv"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
var DB *gorm.DB
func ConnectToDB() {
var err error
// .envファイルから環境変数を読み込む
err = godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
// 環境変数からデータベースURLを取得
dbURL := os.Getenv("DATABASE_URL")
// データベースに接続
DB, err = gorm.Open(postgres.Open(dbURL), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
log.Println("Successfully connected to database")
}
環境変数をロード
.env ファイルがあるかのチェック
loadEnvVariable.go
package initializers
import (
"log"
"github.com/joho/godotenv"
)
func LoadEnvVariable() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
}
マイグレーション
migrate.go
package main
import (
"go-crud/initializers"
"go-crud/models"
)
func init() {
initializers.LoadEnvVariable()
initializers.ConnectToDB()
}
func main() {
initializers.DB.AutoMigrate(&models.Post{})
}
モデルの定義
postModel.go
package models
import "gorm.io/gorm"
type Post struct {
gorm.Model
Title string
Body string
}
マイグレーション
この時点ですでにDBに接続できている状態かと思いますが、サンプルとして実際にマイグレーションを試しに実行してみます。
プロジェクト内に移動して、下記のコマンドを実行します。
このコマンドを実行することで、modelsで定義したPostがテーブルとして作成され反映されます。
$ go run migrate/migrate.go
作成されたか確認してみます。
Postというテーブルが作成されているのが確認できます。
※TablePlusというGUIを使って実際にテーブルの中身を見ました。
Discussion