我無法使用“github.com/jackc/pgx/v4/pgxpool”庫通過 ssh 隧道創建與 postgres 資料庫的連接。我似乎無法弄清楚如何為我想用來建立連接的 *pgxpool.Config 設定 DialFunc。這就是我想要做的:
sshConnStr := mkPostgresXViaSSHConnStr(config, tz)
config, err := parseSshConnStr(sshConnStr)
// var config *pgsshConfig
sshcon, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", config.tunnelHost, config.tunnelConfig), &config.tunnelConfig)
// var sshcon *ssh.Client
cfg, err = pgxpool.ParseConfig(config.pgConnStr)
// var cfg *pgxpool.Config
cfg.ConnConfig.DialFunc = func(network, addr string) (net.Conn, error) {
return sshcon.Dial(network, addr)
}
當我嘗試設定 DialFunc 時,出現以下錯誤:無法使用 (func(network, addr string) (net.Conn, error) literal) (value of type func(network string, addr string) (net.Conn, error )) 作為賦值中的 pgconn.DialFunc 值
關于如何讓它作業的任何建議?
uj5u.com熱心網友回復:
添加背景關系并轉換為pgconn.DialFunc:
package main
import (
"context"
"net"
"github.com/jackc/pgconn"
"github.com/jackc/pgx/v4/pgxpool"
)
func main() {
cfg, _ := pgxpool.ParseConfig("")
myDial := func(ctx context.Context, network, addr string) (net.Conn, error) {
return nil, nil
}
cfg.ConnConfig.DialFunc = pgconn.DialFunc(myDial)
}
uj5u.com熱心網友回復:
我正在查看 DialFunc 的錯誤型別。對于 pgx/v3.6.2,只需要網路和地址作為引數。在更新版本中,pgx/v4 context.Context 也需要作為變數傳遞(無論是否實際使用)。修復錯誤的更新是這樣的:
cfg.ConnConfig.DialFunc = func(ctx context.Context, network, addr string) (net.Conn, error) {
return sshcon.Dial(network, addr)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417948.html
標籤:
