Close

go-pg

go-pg

github repository: https://github.com/go-pg/pg
github wiki: https://github.com/go-pg/pg/wiki/
godoc reference: https://godoc.org/github.com/go-pg/pg

go-pg는 앞서 작성했던 다양한 Database를 지원하던 orm packages 와 다르게 postgreSQL 에 특화된 orm 입니다.

go-pg는 내부 소개에서 100개의 Row를 호출시 gorm 대비 2~10 배 빠르다고 합니다.

실제 사용하며 기존의 다른 orm들이 Postgres에 Jsonb 타입을 Postgres에 Mapping시킬때 string 'orm:type(json)' 타입만을 지원하고map[string]interface{} 또는 json.RawMessage타입 정상적으로 지원 하지 않는것과는 다르게 Model struct(or map[string]interface{}) 까지도 Mapping 시켜 개발시 좀 더 정형화되고 체계적으로 개발할 수 있게 도와줍니다.

// gorm
type user struct {
    Id int
    //jsonb column
    Profile string `gorm:"type:jsonb"`
}

// go-pg
type user struct {
    Id int
    //jsonb column
    Profile Profile
}
type Profile struct {
    Name string
    ...
}

이러한 장점으로 인하여 Jsonb 타입의 컬럼을 원하며 해당 컬럼을 체계적으로 정형화 하여 사용하고 싶다면 go-pg는 좋은 선택이 될 수 있습니다.

다만 단점으로는 기존 orm 보다 상대적으로 좀 더 query친화적이여야 한다는 것입니다.

예를 들어 기존의 gorm이 아래와 같이 model만 이용하여 select가 가능했다고 하면 go-pg는 pk를 기준으로 select 하는 경우를 제외하고는 sql의 일부를 사용해줘야 합니다.

// Example gorm, go-pg select where
var user User

// grom Select Where
db.Where(&User{Name: "myName", Age: 25}).First(&user)

// go-pg Select
// select by pk
user := User{Id: uid}
db.Select(&user)
// select where
db.Model(&user).
        Column("*").
        Where("Name=?", "myName").
        Select()

Leave a Reply

avatar
  Subscribe  
Notify of
%d 블로거가 이것을 좋아합니다: