我在迁移时遇到以下错误
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;"`
}
如果我应该发布代码的其他部分,请告诉我。