ent.go说的是SQL:在任何查询上数据库都已关闭。

huangapple go评论124阅读模式
英文:

ent.go saying sql: databse is closed on any query

问题

db/db.go文件中的DbClient函数是用于创建数据库客户端的函数。它使用提供的配置信息来连接到PostgreSQL数据库,并返回一个ent.Client对象。

services/userservice.go文件中的CreateUser函数是用于创建用户的函数。它接受一个ent.Client对象和一个model.NewUser对象作为输入参数,并使用这些参数创建一个新的用户。

根据你提供的信息,当执行CreateUser函数时,出现了sql: database is closed的错误。这个错误通常是由于数据库连接已关闭导致的。可能的原因是在调用CreateUser函数之前,数据库连接已经被关闭了。

你可以检查一下在调用CreateUser函数之前是否有关闭数据库连接的代码。另外,你还可以确保在调用CreateUser函数之前,数据库连接是处于打开状态的。

如果以上方法都没有解决问题,你可以提供更多的代码和错误信息,以便我能够更好地帮助你解决这个问题。

英文:

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 client creating all necessary tables and showing database is connected.
But when I am executing CreateUser() it is returning sql: database is closed. Can anyone tell me why this is happening?

答案1

得分: 4

在你的引导代码中有一个数据库连接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() // <- 这里
  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() // <- 这里
    return user, nil
}
英文:

There is a database connection Close call in your bootstrap code:

func DbClient(cfg *config.Config, logger log.Logger) *ent.Client {
  // &quot;host=&lt;host&gt; port=&lt;port&gt; user=&lt;user&gt; dbname=&lt;database&gt; password=&lt;pass&gt;&quot;
  psqlInfo := fmt.Sprintf(&quot;host=%s port=%s user=%s dbname=%s password=%s&quot;,
cfg.DB_HOST, cfg.DB_PORT, cfg.DB_USER, cfg.DB_NAME, cfg.DB_PASS)
  client, err := ent.Open(&quot;postgres&quot;, psqlInfo)
  if err != nil {
      logger.Fatal(err)
  }
  defer client.Close() // &lt;- this one
  logger.Info(&quot;Database Connected&quot;)
  if err := client.Schema.Create(context.Background()); !errors.Is(err, nil) {
    logger.Fatalf(&quot;Error: failed creating schema resources %v\n&quot;, err)
  }
  return client
}

This call close connection after returning client.
If it necessary to close a connection, close it in from the CreateUser() func.

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 &amp;ent.User{}, err
    }
    defer client.Close() // &lt;- here
    return user, nil
}

huangapple
  • 本文由 发表于 2022年1月13日 15:55:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/70693098.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定