Memorandum für die Migration mit GORM

Einführung

Notieren Sie sich den Teil, der ein wenig untersucht wurde, z. B. die Modelldefinition mit struct und die Migration mit AutoMigrate.

So verwenden Sie die UUID für die ID

Ich wollte in der Lage sein, beim Testen und Eingeben von Startdaten eine feste UUID anzugeben, während die automatische Generierung von UUIDs der Bibliothek überlassen wurde. Daher habe ich die folgenden Aktionen ausgeführt.

Definieren Sie zunächst das Modell in struct

package model

import (
	"github.com/go-playground/validator/v10"
	"github.com/google/uuid"
)

type User struct {
  ID string `validate:"is_valid_uuid" gorm:"primaryKey;size:255;default:uuid_generate_v4()" json:"id"`
  ...
}

//Wenn die ID nicht kommt, validieren Sie sie nicht. Wenn dies der Fall ist, überprüfen Sie, ob es sich um eine UUID handelt
validate := validator.New()
validate.RegisterValidation("is_valid_uuid", isValidUUID)

func isValidUUID(fl v.FieldLevel) bool {
	id := fl.Field().String()
	if len(id) == 0 {
		return true
	}
	_, err := uuid.Parse(id)
	return err == nil
}

Um das obige "uuid_generate_v4 ()" zu verwenden, installieren Sie die Erweiterung "uuid-ossp" in postgres vor "AutoMigrate (& User {})"

db, err = gorm.Open("postgres", fmt.Sprintf(
  "host=%s port=%s user=%s password=%s dbname=%s", host, port, user, password, dbname,
))

if err != nil {
  panic(err)
}

db.Exec(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`)

result := db.AutoMigrate(&model.User{})
...

Um Postgres-Aufzählungstyp zu verwenden

Geben Sie den Typ mit dem Tag von struct an

type User struct {
  Role string `validate:"is_valid_role" gorm:"type:role_enum;default:'user'" json:"role"`
  ...
}

Fügen Sie postgres vor AutoMigrate eine Typdefinition hinzu

db.Exec(`
DO
$$
BEGIN
  IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'role_enum') THEN
    create type role_enum AS ENUM ('admin', 'editor', 'user');
  END IF;
END
$$;
`)

result := db.AutoMigrate(&model.User{})
...

Zusammenfassung

Es war ein Memo über die Migration von GORM. Wenn es andere gibt, werde ich sie hinzufügen.

Recommended Posts

Memorandum für die Migration mit GORM
Memorandum beim Ausführen von Python auf EC2 mit Apache
elasticsearch_dsl Memorandum
Memorandum zu Djangos QueryDict
Snippet-Zusammenfassung bei der Entwicklung mit Go
Ein Memorandum über Probleme beim Formatieren von Daten
Bedeutet Memo, wenn versucht wird, maschinelles Lernen mit 50 Bildern durchzuführen
Memorandum von sed
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
[PyTorch] Ein wenig Verständnis von CrossEntropyLoss mit mathematischen Formeln
Analyse der Messdaten ①-Memorandum of Scipy Fitting-
Zusammenfassung der Probleme bei der semantischen Segmentierung mit Pytorch
Memorandum über die Umgebungskonstruktion der AutoML-Bibliothek PyCaret
Ein Memorandum, wenn bei der Pip-Installation ein Fehler auftritt
Dinge, die Sie bei der Migration mit Django beachten sollten
Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye
Vorsichtsmaßnahmen bei der Berechnung mit Zeichenfolge für TmeStampType von PySpark
Memorandum of fastText (Bearbeitung)
Memorandum of vi Befehl
1. Mit Python gelernte Statistiken 2. Wahrscheinlichkeitsverteilung [Gründliches Verständnis von scipy.stats]
Eine Sammlung von Methoden, die beim Aggregieren von Daten mit Pandas verwendet werden