为 pgxpool.Config 设置 DialFunc
Setting a DialFunc for pgxpool.Config
我在使用“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 时出现以下错误:cannot use (func(network, addr string) (net.Conn, error) literal) (value of type func( network string, addr string) (net.Conn, error)) as pgconn.DialFunc value in assignment
关于如何让它工作有什么建议吗?
添加上下文并转换为 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)
}
我看错了 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)
}
我在使用“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 时出现以下错误:cannot use (func(network, addr string) (net.Conn, error) literal) (value of type func( network string, addr string) (net.Conn, error)) as pgconn.DialFunc value in assignment
关于如何让它工作有什么建议吗?
添加上下文并转换为 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)
}
我看错了 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)
}