Home > Software engineering >  Setting a DialFunc for pgxpool.Config
Setting a DialFunc for pgxpool.Config

Time:01-20

I am having trouble creating a connection to a postgres database via ssh tunneling with the "github.com/jackc/pgx/v4/pgxpool" library. I cannot seem to figure out how to set the DialFunc for the *pgxpool.Config that I would like to use to establish a connection. This is what I'm trying to do:

        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)
        }

When I try to set the DialFunc I get the following error: 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

Any suggestions about how to get this to work?

CodePudding user response:

Add context and cast to 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)
}

CodePudding user response:

Turns out the readMe I was looking at was out of date and the DialFunc needs a context too like this cfg.ConnConfig.DialFunc = func(ctx context.Context, network, addr string) (net.Conn, error) { return sshcon.Dial(network, addr) }

  •  Tags:  
  • Related