【问题标题】:cockroarch DB "conn closed"蟑螂数据库“连接关闭”
【发布时间】:2021-11-08 15:47:16
【问题描述】:
            var db *pgx.Conn //database

            func ConnectCockroachDB() {
                var dbUri string = "testurl"
                conn, err := pgx.Connect(context.Background(), dbUri)
                if err != nil {
                    fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
                    os.Exit(1)
                }
                db = conn
            }

            //returns a handle to the DB object
            func GetDB() *pgx.Conn {
                if db == nil {
                    ConnectCockroachDB()
                }
                return db
            }

但我重新启动数据库后,应用程序无法自动连接。错误是“连接关闭”。我需要重新启动应用程序才能使应用程序正常运行

【问题讨论】:

    标签: go connection cockroachdb


    【解决方案1】:

    由于您使用的是 pgx,您可能想尝试使用 pgxpool 进行连接:https://pkg.go.dev/github.com/jackc/pgx/v4/pgxpool

    如果旧连接关闭,它会自动创建新连接。它还已经支持并发使用。

    【讨论】:

      【解决方案2】:

      只回答你的问题:

      func GetDB() *pgx.Conn {
          if db == nil || db.IsClosed() {
              ConnectCockroachDB()
          }
          return db
      }
      

      但是,此代码在多个 goroutine 中使用并不安全。应该有一个用于访问和更新全局数据库实例的锁以避免竞争条件。

      【讨论】:

        猜你喜欢
        • 2022-07-08
        • 1970-01-01
        • 2022-01-28
        • 1970-01-01
        • 2019-02-23
        • 2011-10-19
        • 2013-10-16
        • 1970-01-01
        相关资源
        最近更新 更多