>백엔드 개발 >Golang >Gorm 및 PostgreSQL을 사용하여 JSONB 데이터, 특히 문자열 조각을 효율적으로 관리하는 방법은 무엇입니까?

Gorm 및 PostgreSQL을 사용하여 JSONB 데이터, 특히 문자열 조각을 효율적으로 관리하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-25 02:25:121048검색

How to Efficiently Manage JSONB Data, Especially String Slices, with Gorm and PostgreSQL?

Gorm에서 JSONB 데이터 처리

Gorm을 사용하여 Postgres에서 JSONB 데이터를 관리하는 것은 특히 문자열 조각으로 작업할 때 문제가 될 수 있습니다. 다음은 사용 가능한 옵션에 대한 자세한 검사입니다.

postgres.Jsonb 사용:

Gorm은 JSONB 조작을 위해 설계된 특정 유형인 postgres.Jsonb를 제공합니다. 이 방법은 간단한 접근 방식을 제공하지만 Gorm 관련 유형을 사용하지 않으려는 시나리오에는 적합하지 않을 수 있습니다.

문자열 조각:

Go 구조체를 정의할 때 문자열 조각을 JSONB 객체로 매핑하려고 시도하면 Gorm이 어려움을 겪을 수 있습니다. 이 접근 방식을 선택하는 경우 아래와 같이 sql 및 json 태그를 명시적으로 지정해야 합니다.

type User struct {
    gorm.Model
    Data []string `sql:"type:jsonb" json:"data"`
}

그러나 이 접근 방식은 AutoMigrate 실행 중에 패닉을 유발할 수 있습니다.

중첩 구조체:

패닉 문제를 우회하려면 문자열 조각을 중첩된 문자열로 래핑할 수 있습니다. struct:

type User struct {
    gorm.Model
    Data struct {
        NestedData []string
    } `sql:"type:jsonb" json:"data"`
}

이 기술은 충돌을 방지하지만 Postgres에서 의도한 열을 생성하지 못할 수도 있습니다.

pgtype.JSONB를 사용한 대체 솔루션:

선호되는 접근 방식 Gorm의 기본 드라이버인 pgx에서 사용할 수 있는 pgtype.JSONB 유형을 활용하는 작업이 포함됩니다. 이 방법을 사용하면 사용자 정의 코드가 필요하지 않으며 문자열 조각 이외의 모든 JSONB 유형을 조작할 수 있습니다.

다음은 pgtype.JSONB를 사용하는 방법에 대한 예입니다.

type User struct {
    gorm.Model
    Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"`
}

다음에서 데이터를 검색합니다. 데이터베이스:

u := User{}
db.Find(&u)

var data []string
_ = u.Data.AssignTo(&data)

데이터를 업데이트하려면 데이터베이스:

u := User{}
_ = u.Data.Set([]string{"abc", "def"})
db.Updates(&u)

이 접근 방식을 활용하면 postgres.Jsonb 유형을 사용하지 않고도 Gorm에서 JSONB 데이터를 효과적으로 관리할 수 있습니다.

위 내용은 Gorm 및 PostgreSQL을 사용하여 JSONB 데이터, 특히 문자열 조각을 효율적으로 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.