johannaojeling commented on issue #28446:
URL: https://github.com/apache/beam/issues/28446#issuecomment-1722209708

   @sroutweave the native `databaseio` connector uses the `database/sql` 
package, which requires a [supported 
driver](https://github.com/golang/go/wiki/SQLDrivers) to be registered. For 
Postgres, you could use for instance [pq](https://github.com/lib/pq) or 
[pgx](https://github.com/jackc/pgx).
   
   In your Go program, you will need to add a blank import to the selected 
driver package in order for its driver to get registered. The pq driver will be 
registered under the name `postgres` and pgx under `pgx`. You will need to pass 
the same name as the driver argument to the `databaseio.Read` function, instead 
of the JDBC name `org.postgresql.Driver` for the correct driver to be picked up.
   
   Example program:
   
   ```go
   package main
   
   import (
        "context"
        "flag"
        "log"
        "reflect"
   
        "github.com/apache/beam/sdks/v2/go/pkg/beam"
        "github.com/apache/beam/sdks/v2/go/pkg/beam/io/databaseio"
        "github.com/apache/beam/sdks/v2/go/pkg/beam/x/beamx"
        "github.com/apache/beam/sdks/v2/go/pkg/beam/x/debug"
        _ "github.com/jackc/pgx/v5/stdlib" // driver: "pgx"
        //_ "github.com/lib/pq" // driver: "postgres"
   )
   
   var (
        driver = flag.String("driver", "pgx", "Database driver")
        dsn    = flag.String("dsn", "host=localhost port=5432 user=postgres 
password=pwd dbname=postgres sslmode=disable", "Database DSN")
        table  = flag.String("table", "users", "Database table")
   )
   
   type User struct {
        ID    string
        Name  string
        Email string
   }
   
   func main() {
        flag.Parse()
   
        beam.Init()
        p, s := beam.NewPipelineWithRoot()
   
        rows := databaseio.Read(s, *driver, *dsn, *table, 
reflect.TypeOf(User{}))
        debug.Print(s, rows)
   
        ctx := context.Background()
        if err := beamx.Run(ctx, p); err != nil {
                log.Fatalf("Failed to execute job: %v", err)
        }
   }
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to