Maison > développement back-end > Golang > Comment gérer efficacement les données JSONB, en particulier les tranches de chaînes, avec Gorm et PostgreSQL ?

Comment gérer efficacement les données JSONB, en particulier les tranches de chaînes, avec Gorm et PostgreSQL ?

DDD
Libérer: 2024-11-25 02:25:12
original
1013 Les gens l'ont consulté

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

Gestion des données JSONB dans Gorm

La gestion des données JSONB dans Postgres avec Gorm peut poser des défis, en particulier lorsque vous travaillez avec une tranche de chaînes. Voici un examen détaillé des options disponibles :

Utilisation de postgres.Jsonb :

Gorm fournit un type spécifique, postgres.Jsonb, conçu pour la manipulation JSONB. Bien que cette méthode offre une approche simple, elle n'est peut-être pas idéale pour les scénarios dans lesquels vous préférez éviter d'utiliser le type spécifique à Gorm.

Tranche de chaînes :

Lors de la définition d'une structure Go avec un tranche de chaînes et en essayant de la mapper en tant qu'objet JSONB, Gorm peut rencontrer des difficultés. Si vous choisissez cette approche, vous devrez spécifier explicitement les balises sql et json comme indiqué ci-dessous :

type User struct {
    gorm.Model
    Data []string `sql:"type:jsonb" json:"data"`
}
Copier après la connexion

Cependant, cette approche peut déclencher une panique lors de l'exécution d'AutoMigrate.

Imbriqué Struct :

Pour contourner le problème de panique, vous pouvez envelopper la tranche de chaînes dans un fichier imbriqué struct :

type User struct {
    gorm.Model
    Data struct {
        NestedData []string
    } `sql:"type:jsonb" json:"data"`
}
Copier après la connexion

Bien que cette technique évite le crash, elle risque de ne pas créer la colonne prévue dans Postgres.

Solution alternative avec pgtype.JSONB :

Une approche privilégiée implique d'utiliser le type pgtype.JSONB disponible dans pgx, le pilote sous-jacent de Gorm. Cette méthode élimine le besoin de code personnalisé et permet la manipulation de tout type JSONB au-delà des tranches de chaîne.

Voici un exemple d'utilisation de pgtype.JSONB :

type User struct {
    gorm.Model
    Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"`
}
Copier après la connexion

Pour récupérer des données de la base de données :

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

var data []string
_ = u.Data.AssignTo(&data)
Copier après la connexion

Pour mettre à jour les données dans la base de données :

u := User{}
_ = u.Data.Set([]string{"abc", "def"})
db.Updates(&u)
Copier après la connexion

Par en tirant parti de cette approche, vous pouvez gérer efficacement les données JSONB dans Gorm sans utiliser le type postgres.Jsonb.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal