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 중국어 웹사이트의 기타 관련 기사를 참조하세요!