迁移失败

时间:2021-06-08 15:59:13

标签: postgresql go go-gorm

我在迁移时遇到以下错误

2021/06/08 11:01:40 /go/pkg/mod/gorm.io/driver/postgres@v1.1.0/migrator.go:157 ERROR: duplicate key value violates unique constraint "pg_type_typname_nsp_index" (SQLSTATE 23505)
[18.041ms] [rows:0] CREATE TABLE "users" ("id" bigserial,"created_at" timestamptz,"updated_at" timestamptz,"deleted_at" timestamptz,"email" text UNIQUE,"password" text,PRIMARY KEY ("id"))
2021/06/08 11:01:40 Migration error: ERROR: duplicate key value violates unique constraint "pg_type_typname_nsp_index" (SQLSTATE 23505)
FAIL    github.com/dhis2-sre/instance-manager-api/tests/handler/authentication  0.059s

我怀疑我定义模型的方式有问题。可能与我如何定义用户和组之间的关系有关。

type Group struct {
    gorm.Model
    Name                 string               `gorm:"unique;"`
    Users                []User               `gorm:"many2many:user_groups;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
    Instances            []Instance           `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
    ClusterConfiguration ClusterConfiguration `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
}

type ClusterConfiguration struct {
    gorm.Model
    GroupID                 uint
    KubernetesConfiguration SopsPair `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
    //  AWSCredentials          SopsPair
    //  AWSConfiguration        SopsPair
}

type SopsPair struct {
    gorm.Model
    ClusterConfigurationID uint
    Data                   string
    Format                 string
}

type Instance struct {
    gorm.Model
    Name               string `gorm:"unique;"`
    UserID             uint
    GroupID            uint
    StackID            uint
    RequiredParameters []InstanceRequiredParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"requiredParameters,omitempty"`
    OptionalParameters []InstanceOptionalParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"optionalParameters,omitempty"`
}

type InstanceRequiredParameter struct {
    gorm.Model
    InstanceID               uint                   `gorm:"index:idx_instance_required_parameter,unique"`
    StackRequiredParameterID uint                   `gorm:"index:idx_instance_required_parameter,unique"`
    StackRequiredParameter   StackRequiredParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"`
    Value                    string
}

type InstanceOptionalParameter struct {
    gorm.Model
    InstanceID               uint                   `gorm:"index:idx_instance_optional_parameter,unique"`
    StackOptionalParameterID uint                   `gorm:"index:idx_instance_optional_parameter,unique"`
    StackOptionalParameter   StackOptionalParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"`
    Value                    string
}

type Stack struct {
    gorm.Model
    Name               string                   `gorm:"unique;"`
    RequiredParameters []StackRequiredParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"requiredParameters,omitempty"`
    OptionalParameters []StackOptionalParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"optionalParameters,omitempty"`
    Instances          []Instance               `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
}

type StackRequiredParameter struct {
    gorm.Model
    StackID uint   `gorm:"index:idx_name_required_parameter,unique"`
    Name    string `gorm:"index:idx_name_required_parameter,unique"`
}

type StackOptionalParameter struct {
    gorm.Model
    StackID uint   `gorm:"index:idx_name_optional_parameter,unique"`
    Name    string `gorm:"index:idx_name_optional_parameter,unique"`
}

type User struct {
    gorm.Model
    Email     string     `gorm:"unique;"`
    Password  string     `json:"-"`
    Groups    []Group    `gorm:"many2many:user_groups;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
    Instances []Instance `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
}

如果我应该发布代码的其他部分,请告诉我。

0 个答案:

没有答案