keyboard_tabSkip to content
listGoAPI Essential

แนะนำ Migration

สารบัญ

เริ่มต้นที่ Migration

Ref: https://gorm.io/docs/migration.html

มาเริ่มต้น project กัน โดย start ลง libray ก่อน (init project ใหม่)

bash
go get -u gorm.io/gorm
go get -u gorm.io/driver/postgres
  • ทำการลง gorm และลง driver postgres (เหมือนหัวข้อ SQL ก่อนหน้านี้)

ทำการสร้างไฟล์สำหรับ models.go และ main.go

main.go

go
package main

import (
  "fmt"
  "gorm.io/driver/postgres"
  "gorm.io/gorm"
)

const (
  host     = "localhost"  // or the Docker service name if running in another container
  port     = 5432         // default PostgreSQL port
  user     = "myuser"     // as defined in docker-compose.yml
  password = "mypassword" // as defined in docker-compose.yml
  dbname   = "mydatabase" // as defined in docker-compose.yml
)

func main() {
  // Configure your PostgreSQL database details here
	dsn := fmt.Sprintf("host=%s port=%d user=%s "+
  "password=%s dbname=%s sslmode=disable",
  host, port, user, password, dbname)
  db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
  if err != nil {
    panic("failed to connect to database")
  }
  // Migrate the schema
  db.AutoMigrate(&Book{})
  fmt.Println("Database migration completed!")
}

models.go

go
package main

import (
  "gorm.io/gorm"
)

type Book struct {
  gorm.Model
  Name        string
  Author      string
  Description string
}

จากนั้นทำการ run

bash
go run .

ผลลัพธ์

migration-01

migration-02

เพิ่ม Tracing

Ref: https://gorm.io/docs/logger.html

Note

  • เพื่อให้สะดวกต่อการ debug ใน GORM เรื่อง query
  • GORM ได้ทำการเพิ่ม logger มาให้เพื่อให้สะดวกต่อการ debug มากขึ้น
go
package main

import (
  "fmt"
  "gorm.io/driver/postgres"
  "gorm.io/gorm"
  "gorm.io/gorm/logger"
  "log"
  "os"
  "time"
)

const (
  host     = "localhost"  // or the Docker service name if running in another container
  port     = 5432         // default PostgreSQL port
  user     = "myuser"     // as defined in docker-compose.yml
  password = "mypassword" // as defined in docker-compose.yml
  dbname   = "mydatabase" // as defined in docker-compose.yml
)

func main() {
  // Configure your PostgreSQL database details here
  dsn := fmt.Sprintf("host=%s port=%d user=%s "+ 
    "password=%s dbname=%s sslmode=disable",
    host, port, user, password, dbname)

  // New logger for detailed SQL logging
  newLogger := logger.New(
    log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
    logger.Config{
      SlowThreshold: time.Second, // Slow SQL threshold
      LogLevel:      logger.Info, // Log level
      Colorful:      true,        // Enable color
    },
  )

  db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
    Logger: newLogger, // add Logger
  })

  if err != nil {
    panic("failed to connect to database")
  }

  // Migrate the schema
  db.AutoMigrate(&Book{})
  fmt.Println("Database migration completed!")
}

ผลลัพธ์จากการใส่ Logger (หลังจากที่ลอง run migration อีกที)

migration-03