You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airbyte 0.61.0 Postgres-Kafka连接Schema发现失败求助

Airbyte PostgreSQL源Schema发现失败问题排查

问题场景

Linux服务器Docker部署Airbyte 0.61.0,创建PostgreSQL(连接器版本3.4.10)→ Kafka(连接器版本0.1.10)的连接时,第三步「选择流」环节报错:
Discovering schema failed - Failed to run schema discovery

已完成验证:

  • Postgres与Kafka的连接均正常
  • Postgres用户对目标Schema的权限配置正确
  • 测试库仅包含一个小表及默认public Schema,且已在Postgres连接器配置中指定'public' Schema
  • 尝试启用「通过Xmin系统列检测变更」和「通过自定义游标扫描变更」均无效果
  • 切换其他Postgres数据库或Schema,仍出现相同错误

相关日志(中文翻译)

"logLines": [
        "2024-06-04 19:02:00  > Docker卷任务日志路径: /tmp/workspace/61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa/0/logs.log",
        "2024-06-04 19:02:00  > 执行worker包装器. Airbyte版本: 0.61.0",
        "2024-06-04 19:02:00  > 使用环境变量SIDECAR_KUBE_CPU_LIMIT的默认值: '2.0'",
        "2024-06-04 19:02:00  > 使用环境变量SOCAT_KUBE_CPU_LIMIT的默认值: '2.0'",
        "2024-06-04 19:02:00  > 使用环境变量SIDECAR_KUBE_CPU_REQUEST的默认值: '0.1'",
        "2024-06-04 19:02:00  > 使用环境变量SOCAT_KUBE_CPU_REQUEST的默认值: '0.1'",
        "2024-06-04 19:02:00  > 检查airbyte/source-postgres:3.4.10是否存在...",
        "2024-06-04 19:02:00  > airbyte/source-postgres:3.4.10已在本地找到.",
        "2024-06-04 19:02:00  > 创建docker容器 = source-postgres-discover-61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa-0-gejuz,资源配置为io.airbyte.config.ResourceRequirements@66677c2e[cpuRequest=,cpuLimit=,memoryRequest=,memoryLimit=,additionalProperties={}],允许主机为null",
        "2024-06-04 19:02:00  > 准备命令: docker run --rm --init -i -w /data/61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa/0 --log-driver none --name source-postgres-discover-61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa-0-gejuz --network host -v airbyte_workspace:/data -v oss_local_root:/local -e DEPLOYMENT_MODE=OSS -e WORKER_CONNECTOR_IMAGE=airbyte/source-postgres:3.4.10 -e AUTO_DETECT_SCHEMA=true -e LAUNCHDARKLY_KEY= -e SOCAT_KUBE_CPU_REQUEST=0.1 -e SOCAT_KUBE_CPU_LIMIT=2.0 -e FIELD_SELECTION_WORKSPACES= -e USE_STREAM_CAPABLE_STATE=true -e WORKER_ENVIRONMENT=DOCKER -e AIRBYTE_ROLE=dev -e APPLY_FIELD_SELECTION=false -e WORKER_JOB_ATTEMPT=0 -e OTEL_COLLECTOR_ENDPOINT=http://host.docker.internal:4317 -e FEATURE_FLAG_CLIENT=config -e AIRBYTE_VERSION=0.61.0 -e WORKER_JOB_ID=61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa airbyte/source-postgres:3.4.10 discover --config source_config.json",
        "2024-06-04 19:02:00  > 从协议版本0.2.0读取消息",
        "2024-06-04 19:02:01  > INFO main i.a.i.s.p.PostgresSource(main):667 启动源: class io.airbyte.integrations.source.postgres.PostgresSource",
        "2024-06-04 19:02:01  > INFO main i.a.c.i.b.IntegrationCliParser$Companion(parseOptions):144 集成参数: {discover=null, config=source_config.json}",
        "2024-06-04 19:02:01  > INFO main i.a.c.i.b.IntegrationRunner(runInternal):124 运行集成: io.airbyte.cdk.integrations.base.ssh.SshWrappedSource",
        "2024-06-04 19:02:01  > INFO main i.a.c.i.b.IntegrationRunner(runInternal):125 命令: DISCOVER",
        "2024-06-04 19:02:01  > INFO main i.a.c.i.b.IntegrationRunner(runInternal):126 集成配置: IntegrationConfig{command=DISCOVER, configPath='source_config.json', catalogPath='null', statePath='null'}",
        "2024-06-04 19:02:01  > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字groups - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword",
        "2024-06-04 19:02:01  > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字order - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword",
        "2024-06-04 19:02:01  > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字group - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword",
        "2024-06-04 19:02:01  > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字airbyte_secret - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword",
        "2024-06-04 19:02:01  > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字always_show - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword",
        "2024-06-04 19:02:01  > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字display_type - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword",
        "2024-06-04 19:02:01  > INFO main i.a.c.i.b.s.SshTunnel$Companion(getInstance):423 启动连接, 方式: NO_TUNNEL",
        "2024-06-04 19:02:01  > INFO main i.a.i.s.p.PostgresSource(toSslJdbcParamInternal):888 DISABLED toSslJdbcParam disable",
        "2024-06-04 19:02:01  > INFO main c.z.h.HikariDataSource(<init>):79 HikariPool-1 - 启动中...",
        "2024-06-04 19:02:01  > INFO main c.z.h.HikariDataSource(<init>):81 HikariPool-1 - 启动完成.",
        "2024-06-04 19:02:02  > INFO main i.a.i.s.p.PostgresUtils(isCdc):70 使用CDC: false",
        "2024-06-04 19:02:02  > INFO main i.a.c.i.s.j.AbstractJdbcSource(discoverInternal):291 要排除的内部Schema: [catalog_history, information_schema, pg_catalog, pg_internal]",
        "2024-06-04 19:02:02  > INFO main i.a.c.d.j.s.AdaptiveStreamingQueryConfig(initialize):24 设置初始抓取大小: 10行",
        "2024-06-04 19:02:02  > INFO main i.a.c.i.s.j.AbstractJdbcSource(discoverPrimaryKeys):428 为表发现主键: []",
        "2024-06-04 19:02:02  > INFO main c.z.h.HikariDataSource(close):349 HikariPool-1 - 开始关闭...",
        "2024-06-04 19:02:02  > INFO main c.z.h.HikariDataSource(close):351 HikariPool-1 - 关闭完成.",
        "2024-06-04 19:02:02  > INFO main i.a.i.s.p.PostgresSource(toSslJdbcParamInternal):888 DISABLED toSslJdbcParam disable",
        "2024-06-04 19:02:02  > INFO main c.z.h.HikariDataSource(<init>):79 HikariPool-2 - 启动中...",
        "2024-06-04 19:02:02  > INFO main c.z.h.HikariDataSource(<init>):81 HikariPool-2 - 启动完成.",
        "2024-06-04 19:02:02  > INFO main i.a.i.s.p.PostgresUtils(isCdc):70 使用CDC: false",
        "2024-06-04 19:02:02  > INFO main i.a.i.s.p.PostgresUtils(isCdc):70 使用CDC: false",
        "2024-06-04 19:02:02  > INFO main i.a.i.s.p.PostgresUtils(isXmin):190 使用Xmin: false",
        "2024-06-04 19:02:02  > INFO main i.a.c.i.b.IntegrationRunner(runInternal):268 完成集成: io.airbyte.cdk.integrations.base.ssh.SshWrappedSource",
        "2024-06-04 19:02:02  > INFO main i.a.i.s.p.PostgresSource(main):669 完成源: class io.airbyte.integrations.source.postgres.PostgresSource"
    ]

关键分析

日志中Discover primary keys for tables: []是核心问题:Airbyte成功连接到Postgres,但未发现任何表,导致Schema发现失败。

排查及解决步骤

  1. 验证Postgres用户的表访问权限
    使用连接器配置的Postgres用户登录数据库,执行以下SQL确认能看到目标表:

    SELECT * FROM pg_tables WHERE schemaname = 'public';
    

    如果查询结果为空,说明用户没有权限查看该Schema下的表,需重新配置权限(比如执行GRANT SELECT ON ALL TABLES IN SCHEMA public TO <your_user>;)。

  2. 检查数据库名称的正确性
    Postgres的数据库名称区分大小写(如果是带双引号创建的),确认连接器配置中的数据库名称与实际完全一致,无拼写或大小写错误。

  3. 跳过Schema手动指定
    暂时在Postgres连接器配置中不填写Schema名称,让Airbyte自动发现所有Schema,看是否能检测到public下的表。

  4. 测试容器网络连通性
    进入Airbyte的worker容器,测试与Postgres的连通性:

    docker exec -it <airbyte-worker-container-id> bash
    # 安装telnet或nc
    apt update && apt install -y telnet
    # 测试Postgres端口
    telnet <postgres-host> <postgres-port>
    

    确保网络能正常访问Postgres服务。

  5. 升级PostgreSQL连接器版本
    连接器3.4.10可能存在已知的Schema发现bug,尝试升级到Airbyte 0.61.0兼容的最新PostgreSQL连接器版本(比如3.5.x系列)。

  6. 检查Postgres的pg_hba.conf配置
    确认pg_hba.conf中允许Airbyte服务器的IP地址连接,且认证方式正确(比如md5或scram-sha-256),修改后需重启Postgres服务。

内容的提问来源于stack exchange,提问作者DimasJackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:54:50