ent.go говорит sql: база данных закрывается по любому запросу
db/db.go
func DbClient(cfg *config.Config, logger log.Logger) *ent.Client {
// "host=<host> port=<port> user=<user> dbname=<database> password=<pass>"
psqlInfo := fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s",
cfg.DB_HOST, cfg.DB_PORT, cfg.DB_USER, cfg.DB_NAME, cfg.DB_PASS)
client, err := ent.Open("postgres", psqlInfo)
if err != nil {
logger.Fatal(err)
}
defer client.Close()
logger.Info("Database Connected")
if err := client.Schema.Create(context.Background()); !errors.Is(err, nil) {
logger.Fatalf("Error: failed creating schema resources %v\n", err)
}
return client
}
services/userservice.go
func CreateUser(client *ent.Client, input *model.NewUser) (*ent.User, error) {
user, err := client.Debug().User.Create().SetName(input.Name).SetUsername(input.Username).SetEmail(input.Email).SetPassword(input.Password).Save(context.Background())
if err != nil {
return &ent.User{}, err
}
return user, nil
}
ent клиент, создающий все необходимые таблицы и показывающий, что база данных подключена. Но когда я выполняю
CreateUser()
он возвращается
sql: database is closed
. Кто-нибудь может сказать мне, почему это происходит?
1 ответ
Есть подключение к базе
Close
вызовите свой загрузочный код:
func DbClient(cfg *config.Config, logger log.Logger) *ent.Client {
// "host=<host> port=<port> user=<user> dbname=<database> password=<pass>"
psqlInfo := fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s",
cfg.DB_HOST, cfg.DB_PORT, cfg.DB_USER, cfg.DB_NAME, cfg.DB_PASS)
client, err := ent.Open("postgres", psqlInfo)
if err != nil {
logger.Fatal(err)
}
defer client.Close() // <- this one
logger.Info("Database Connected")
if err := client.Schema.Create(context.Background()); !errors.Is(err, nil) {
logger.Fatalf("Error: failed creating schema resources %v\n", err)
}
return client
}
Этот вызов закрывает соединение после возврата
client
. Если необходимо закрыть соединение, закройте его из
CreateUser()
функция
func CreateUser(client *ent.Client, input *model.NewUser) (*ent.User, error) {
user, err := client.Debug().User.Create().SetName(input.Name).SetUsername(input.Username).SetEmail(input.Email).SetPassword(input.Password).Save(context.Background())
if err != nil {
return &ent.User{}, err
}
defer client.Close() // <- here
return user, nil
}