Skip to main content

แนะนำ Migration

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

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

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

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

ทำการสร้างไฟล์สำหรับ models.go และ main.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!")
}

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

go run .

ผลลัพธ์

migration-01

migration-02

เพิ่ม Tracing

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

Note

  • เพื่อให้สะดวกต่อการ debug ใน GORM เรื่อง query
  • GORM ได้ทำการเพิ่ม logger มาให้เพื่อให้สะดวกต่อการ debug มากขึ้น
main.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