为 pgxpool.Config 设置 DialFunc

我无法使用“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 值


关于如何让它工作的任何建议?


慕容森
浏览 182回答 2
2回答

小怪兽爱吃肉

添加上下文并转换为pgconn.DialFunc:package mainimport (        "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)}

猛跑小猪

我正在查看 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)            }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go