티스토리 뷰
Golang에서의 경량 ORM으로서의 bun package를 다루며 경험한 내용을 정리해둔다.
Automatic timestamp
링크: https://bun.uptrace.dev/guide/models.html#automatic-timestamps
INSERT 시에 생성한 시간을 자동으로 추가하도록 하는 기능이다.
Example code with comment
아래 코드와 코멘트로 설명을 마무리 한다.
전체 GitHub Repo: https://github.com/nicewook/bun-orm-study
Query Building Example: https://github.com/nicewook/bun-orm-study/blob/main/default-timestamp/main.go
bun 태그의 의미는 다음과 같다.
참고 링크: https://bun.uptrace.dev/guide/models.html#struct-tags
- nullzero: Go언어에서 type의 zero value 값이라면 null로 처리하거나 default 값을 넣으라는 제약
- notnull: null이 되어서는 안되는 컬럼이라는 제약(constraint)
- default:current_timestamp: 현재 시간을 default 값으로 하라는 것
정리하자면 zero value 값이 온다면 null 또는 default 값을 넣으라는 것인데 null 일 수는 없는 컬럼이니 따로 값을 명시해서 넣지 않으면 항상 current_timestamp 값이 들어가게 된다.
type User struct {
bun.BaseModel `bun:"table:users,alias:u"`
ID int64 `bun:"id,pk,autoincrement"`
Name string `bun:"name,notnull"`
CreatedAt time.Time `bun:"createdAt,nullzero,notnull,default:current_timestamp"`
}
테스트를 위해 INSERT 를 1초 간격으로 한다.
func insertUsers() {
for _, user := range users {
_, err := db.NewInsert().Model(&user).Exec(context.Background())
if err != nil {
panic(err)
}
time.Sleep(time.Second)
}
}
실행 부분과 출력 결과이다.
func main() {
prepareDB()
var createdTimes []time.Time
if err := db.NewSelect().Model((*User)(nil)).
Column("createdAt").
Scan(context.Background(), &createdTimes); err != nil {
panic(err)
}
for i, ctime := range createdTimes {
fmt.Printf("record #%d, created at %v\n", i+1, ctime)
}
}
// 아래와 같이 INSERT 된 시간이 출력된다.
// record #1, created at 2022-12-09 17:26:21 +0000 UTC
// record #2, created at 2022-12-09 17:26:22 +0000 UTC
// record #3, created at 2022-12-09 17:26:23 +0000 UTC
// record #4, created at 2022-12-09 17:26:24 +0000 UTC
더 볼 것
PostgresSQL 에서는 Timezone 정보를 포함한 timestamptz를 쓰고, 가능한 timestamp를 쓰지말라
참고 링크: https://bun.uptrace.dev/postgres/postgres-data-types.html#timestamptz-vs-timestamp
'golang' 카테고리의 다른 글
Golang ORM - Bun 삽질 이야기 - timestamp 와 timestamptz (0) | 2022.12.18 |
---|---|
Golang: go get으로 패키지를 최신으로 업데이트 하는 법 (0) | 2022.12.15 |
Golang ORM - Bun 삽질 이야기 - Query building (0) | 2022.12.10 |
Golang ORM - Bun 삽질 이야기 - ScanAndCount (0) | 2022.12.09 |
Golang: 양자 컴퓨터 이후의 암호기술 구현 패키지 sidh 분석 (0) | 2021.12.28 |
- Total
- Today
- Yesterday
- 티스토리챌린지
- 잡학툰
- 클린 애자일
- bun
- 영화
- Bug
- intellij
- 독서후기
- 노션
- 인텔리제이
- github
- OpenAI
- 엉클 밥
- 체호프
- 오블완
- 독서
- golang
- notion
- strange
- go
- API
- solid
- 2023
- Gin
- folklore
- clean agile
- websocket
- 2024년
- ChatGPT
- agile
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |