Go 中的 Apache Beam IO:sql:未知驱动程序“cloudsql-postgres”(忘记导入?)

问题描述 投票:0回答:0

按照指南here,我正在尝试将数据流作业连接到 Go 中 GCP 上的 Cloud SQL Postgres 实例。

我可以在我的机器上本地运行作业。我已验证我的权限是正确的,并且作业具有必要的权限。

问题是,当我尝试运行作业时,出现以下错误:

Name: github.com/apache/beam/sdks/v2/go/pkg/beam/io/databaseio.queryFn] failed: failed to open database: cloudsql-postgres caused by: sql: unknown driver "cloudsql-postgres" (forgotten import?)

这是我用来连接的代码:

func ReadFromPostgres(
    ctx context.Context,
    scope beam.Scope,
    opt *SourceOption,
    secretReader *SecretReader,
    elemType reflect.Type,
    query string,
    postgresDriver string,
) (beam.PCollection, error) {
    cleanup, err := pgxv4.RegisterDriver(postgresDriver, cloudsqlconn.WithIAMAuthN())
    if err != nil {
        return beam.PCollection{}, fmt.Errorf("error connecting to Postgres: %w", err)
    }

    //nolint:all
    defer cleanup()

    scope = scope.Scope("Read from database")

    secret, err := opt.Database.DSN.GetValue(ctx, secretReader)
    if err != nil {
        return beam.PCollection{}, fmt.Errorf("error getting secret value: %w", err)
    }
    envName, location, dbInstanceName, user, dbName := opt.Database.PGEnv.EnvName, opt.Database.PGEnv.Location, opt.Database.PGEnv.DBInstanceName, opt.Database.PGEnv.User, opt.Database.PGEnv.DBName
    dsn := fmt.Sprintf("host=%s:%s:%s user=%s dbname=%s password=%s sslmode=disable", envName, location, dbInstanceName, user, dbName, secret)

    if err != nil {
        return beam.PCollection{}, fmt.Errorf("error getting DSN value: %w", err)
    }

    return databaseio.Query(scope, postgresDriver, dsn, query, elemType), nil

请注意,“cloudsql-postgres”是传递给我传递给函数的 postgresDriver 参数的参数。

这是我的进口商品:

import (
    "context"
    "fmt"
    "reflect"
    "time"

    "cloud.google.com/go/bigquery"
    "cloud.google.com/go/cloudsqlconn"
    "cloud.google.com/go/cloudsqlconn/postgres/pgxv4"
    "github.com/apache/beam/sdks/v2/go/pkg/beam"
    "github.com/apache/beam/sdks/v2/go/pkg/beam/io/bigqueryio"
    "github.com/apache/beam/sdks/v2/go/pkg/beam/io/databaseio"
    "google.golang.org/api/iterator"
)

我认为我的驱动程序将包含在“cloud.google.com/go/cloudsqlconn/postgres/pgxv4”导入中。为什么我的驱动程序没有被函数正确识别?

postgresql go google-cloud-dataflow apache-beam
© www.soinside.com 2019 - 2024. All rights reserved.