2 回答

TA貢獻1806條經驗 獲得超5個贊
pgx.Connect()
返回pgx.Conn
不能同時使用的a。這是此類godocs的說明:
Conn 是 PostgreSQL 連接句柄。并發使用并不安全。使用連接池來管理多個 goroutine 對多個數據庫連接的訪問。
所以如果你pgx.Connect()
用pgxpool.Connect()
from替換github.com/jackc/pgx/pgxpool
你應該沒問題。

TA貢獻1818條經驗 獲得超11個贊
ifr.Db返回的pgx.Connect(context.Background(), os.Getenv("PSQL_URL"))if 類型為*pgx.Connand 表示單個連接,該連接不是并發安全的。通常,您希望使用連接池來為您處理并發并允許重用打開的連接。要使用連接池,請替換import github.com/jackc/pgx/v4withgithub.com/jackc/pgx/v4/pgxpool并使用 connect withpgxpool.Connect()代替pgx.Connect(),并且 api 將是相同的:
r.Pool := pgxpool.Connect(context.Background(), os.Getenv("PSQL_URL"))
r.Pool.Query(context.Background(), query)
...
如果在任何給定點您需要使用單個連接來訪問某些較低級別的功能,您可以安全地獲取并發安全連接,如下所示:
conn, err := r.Pool.Acquire(context.Background())
if err != nil {
fmt.Fprintln(os.Stderr, "Error acquiring connection:", err)
os.Exit(1)
}
defer conn.Release()
...
- 2 回答
- 0 關注
- 233 瀏覽
添加回答
舉報