跳至主要内容

Postgres

本页指导您设置 Postgres 目标连接器。

直接加载

从版本 3.0.0 开始,Postgres 目标使用 直接加载 架构。这意味着数据直接写入最终表,而无需使用中间的原始表,从而提高性能并降低存储成本。

有关迁移详情和向后兼容性选项,请参阅 Postgres 迁移指南

警告

警告

Postgres 虽然是一个优秀的关联数据库,但不是数据仓库。请仅考虑将 Postgres 用作小数据量(例如小于 10GB)或用于测试目的的目标。对于更大的数据量,我们建议使用 BigQuery、Snowflake 或 Redshift 等数据仓库。了解更多 此处

先决条件

要使用 Postgres 目标,您需要

  • Postgres 服务器版本 9.5 或更高版本

Airbyte Cloud 仅支持使用 SSL 或 TLS 加密连接到您的 Postgres 实例。TLS 默认使用。除此之外,您可以按照以下开源说明进行操作。

您需要以下信息来配置 Postgres 目标

  • 主机 - 服务器的主机名。
  • 端口 - 服务器正在侦听的端口号。默认值为 PostgreSQL™ 标准端口号 (5432)。
  • 用户名
  • 密码
  • 默认模式名称 - 指定要在 search-path 中设置的模式(或用逗号分隔的多个模式)。这些模式将用于解析在此连接上执行的语句中使用的未限定的对象名称。
  • 数据库 - 数据库名称。默认情况下,连接到与用户名同名的数据库。
  • JDBC URL 参数 (可选)

请参阅此指南了解更多详细信息

配置网络访问

确保您的 Postgres 数据库可以被 Airbyte 访问。如果您的数据库位于 VPC 内,您可能需要允许来自您用于暴露 Airbyte 的 IP 的访问。

步骤 1:设置 Postgres

权限

您需要一个具有以下权限的 Postgres 用户

  • 可以创建表并写入行。
  • 可以创建模式,例如

您可以通过运行来创建这样的用户

CREATE USER airbyte_user WITH PASSWORD '<password>';
GRANT CREATE, TEMPORARY ON DATABASE <database> TO airbyte_user;

您也可以使用预先存在的用户,但我们强烈建议为 Airbyte 创建一个专用用户。

步骤 2:在 Airbyte 中设置 Postgres 连接器

目标数据库

您需要选择一个现有的数据库或创建一个将用于存储 Airbyte 同步数据的新数据库。

命名约定

来自 Postgres SQL 标识符语法

  • SQL 标识符和关键字必须以字母(a-z,但也包括带有变音符号的字母和非拉丁字母)或下划线 (_) 开头。

  • 标识符或关键字的后续字符可以是字母、下划线、数字 (0-9) 或美元符号 ($)。

    请注意,美元符号在 SQL 标准中不允许在标识符中使用,因此使用它们可能会使应用程序的可移植性降低。SQL 标准不会定义包含数字或以下划线开头或结尾的关键字,因此这种形式的标识符可以安全地用于未来的标准扩展。

  • 系统最多使用 NAMEDATALEN-1 个字节的标识符;可以写入更长的名称,但它们将被截断。默认情况下,NAMEDATALEN 为 64,因此最大标识符长度为 63 个字节

  • 带引号的标识符可以包含任何字符,但不能包含代码为零的字符。(要包含双引号,请写入两个双引号。)这允许构造否则不可能的表或列名,例如包含空格或和号的名称。长度限制仍然适用。

  • 引用标识符也使其区分大小写,而未引用的名称始终折叠为小写。

  • 为了使您的应用程序更具可移植性和更不易出错,请始终如一地引用每个名称(要么始终引用它,要么从不引用它)。

信息

Airbyte Postgres 目标使用带引号的标识符创建最终表及其相应的列,从而保留区分大小写。特殊字符在表和列名称中将被替换为下划线。

当使用遗留“仅原始表”模式时,原始表和模式将使用未引用的标识符创建,方法是将任何特殊字符替换为下划线。

对于 Airbyte Cloud

  1. 登录到您的 Airbyte Cloud 账户。
  2. 在左侧导航栏中,单击 目标。在右上角,单击 新建目标
  3. 在设置目标页面上,输入 Postgres 连接器的名称,然后从“目标类型”下拉菜单中选择 Postgres
  4. 为您的源输入名称。
  5. 对于 主机端口数据库名称,输入您的 Postgres 数据库的主机名、端口号和名称。
  6. 列出 默认模式
注意

模式名称区分大小写。“public”模式默认设置。可以一次使用多个模式。未显式设置模式 - 将同步所有现有模式。

  1. 对于 用户密码,输入您在 步骤 1 中创建的用户名和密码。

  2. 对于 Airbyte 开源,切换开关以使用 SSL 连接。对于 Airbyte Cloud,默认使用 SSL。

  3. 对于 SSL 模式,选择

    • 禁用 以禁用 Airbyte 和源之间的加密通信
    • 允许 仅在源需要时启用加密通信
    • 首选 仅允许在源不支持加密时进行未加密通信
    • 需要 始终需要加密。注意:如果源不支持加密,则连接将失败。
    • 验证 CA 始终需要加密并验证源是否具有有效的 SSL 证书
    • 验证完整性 始终需要加密并验证源的身份
  4. 要超越常用选项自定义 JDBC 连接,请在“JDBC URL 参数(高级)”字段中,指定其他支持的 JDBC URL 参数,这些参数应为键值对,用符号 & 分隔。

    示例:key1=value1&key2=value2&key3=value3

    这些参数将添加到 AirByte 用于连接到您的 Postgres 数据库的 JDBC URL 的末尾。

    该连接器现在支持 connectTimeout,默认值为 60 秒。将 connectTimeout 设置为 0 秒会将超时设置为最长可用时间。

    注意: 请勿在 JDBC URL 参数字段中使用以下键,因为它们将被 Airbyte 覆盖:currentSchemauserpasswordsslsslmode

警告

这是一个高级配置选项。建议用户谨慎使用。

  1. 对于 SSH 隧道方法,请选择

    • 无隧道 以直接连接到数据库
    • SSH 密钥身份验证 以使用 RSA 私钥作为您的密钥来建立 SSH 隧道
    • 密码身份验证 以使用密码作为您的密钥来建立 SSH 隧道
警告

由于 Airbyte Cloud 需要加密通信,因此如果您选择了 禁用允许首选 作为 SSL 模式,请选择 SSH 密钥身份验证密码身份验证;否则,连接将失败。

  1. 点击 设置目标地址

支持的同步模式

Postgres 目标连接器支持以下同步模式

功能支持?(是/否)备注
完全刷新同步
增量 - 追加同步
增量 - 追加 + 去重
命名空间

Schema map

输出 Schema (Direct Load)

Postgres 目标使用 Direct Load 架构。每个流直接写入配置架构中的最终表。该表包括您的数据列以及以下 Airbyte 元数据列

  • _airbyte_raw_id:Airbyte 分配给每个处理事件的 uuid。Postgres 中的列类型为 VARCHAR
  • _airbyte_extracted_at:时间戳,表示从数据源提取事件的时间。Postgres 中的列类型为 TIMESTAMP WITH TIME ZONE
  • _airbyte_meta:jsonb 列,包含有关记录的元数据,包括同步信息和任何架构更改。Postgres 中的列类型为 JSONB
  • _airbyte_generation_id:同步生成的标识符。Postgres 中的列类型为 BIGINT

输出 Schema (Raw Tables) - 已弃用

已弃用

从版本 3.0.0 开始,Raw 表已被弃用。该连接器现在使用 Direct Load 直接写入最终表。有关向后兼容性选项和迁移指南,请参阅 Postgres 迁移指南

旧版 Raw Tables 文档

每个流将被映射到 Postgres 中的一个单独的 raw 表。raw 表创建的默认架构是 airbyte_internal。这可以在配置中被覆盖。每个表将包含 3 列

  • _airbyte_raw_id:Airbyte 分配给每个处理事件的 uuid。Postgres 中的列类型为 VARCHAR
  • _airbyte_extracted_at:时间戳,表示从数据源提取事件的时间。Postgres 中的列类型为 TIMESTAMP WITH TIME ZONE
  • _airbyte_loaded_at:时间戳,表示将行处理到最终表的时间。Postgres 中的列类型为 TIMESTAMP WITH TIME ZONE
  • _airbyte_data:json blob,表示事件数据。Postgres 中的列类型为 JSONB

最终表数据类型映射

Airbyte 类型Postgres 类型
字符串VARCHAR
数字DECIMAL
整数BIGINT
布尔值BOOLEAN
对象JSONB
arrayJSONB
timestamp_with_timezoneTIMESTAMP WITH TIME ZONE
timestamp_without_timezoneTIMESTAMP
time_with_timezoneTIME WITH TIME ZONE
time_without_timezoneTIME
日期DATE

命名限制

Postgres 将所有标识符限制为 63 个字符或更少。如果您的流包含长度超过 63 个字符的列名,它们将被截断为该长度。如果这导致两个列具有相同的名称,Airbyte 可能会修改这些列名以避免冲突。

创建依赖对象

警告

本节涉及对 Airbyte 生成的表运行 DROP ... CASCADE。请确保您完全了解后果后再启用此选项。使用此选项可能会导致永久数据丢失!

您可能需要创建依赖于 Airbyte 生成的表的对象,例如视图。如果是这样,我们强烈建议

  • 使用像 dbt 这样的工具来自动化创建
  • 并使用编排器来触发 dbt

这是因为您需要启用“使用 CASCADE 删除表”选项。连接器有时需要重新创建表;如果您创建了依赖对象,Postgres 将要求连接器运行启用了 CASCADE 的 drop 语句。但是,这将导致连接器同时删除依赖对象。因此,您必须有一种从头开始重新创建这些依赖对象的方法。

教程

现在您已设置 Postgres 目标连接器,请查看以下教程

特定于供应商的连接器限制

警告

并非数据库的所有实现或部署都相同。本节列出了基于连接器如何在哪里部署的特定限制和已知问题。

参考

配置字段参考

字段
类型
属性名称
字符串
database
字符串
host
整数
port
字符串
schema
字符串
username
字符串
cdc_deletion_mode
布尔值
disable_type_dedupe
布尔值
drop_cascade
字符串
jdbc_url_params
字符串
password
字符串
raw_data_schema
布尔值
ssl
对象
ssl_mode
对象
tunnel_method
布尔值
unconstrained_number

变更日志

展开以查看
版本日期拉取请求主题
3.0.8-rc12026-01-2271183重构架构实用程序以遵循 CDK 模式。
3.0.72026-01-2071745改进有关带有 CASCADE 选项的依赖视图/规则的错误消息指导。
3.0.62026-01-0671146修复:在架构更改期间,仅对 DROP COLUMN 应用 CASCADE,而不是 ALTER COLUMN TYPE。
3.0.52025-12-1270895更新 CDK 至 0.1.86。
3.0.5-rc.12025-12-0970338更新 CDK 至 0.1.86。
3.0.42025-12-0570355修复:启用“仅 Raw 表”模式时强制追加模式,绕过 Dedupe 模式以避免错误。
3.0.32025-12-0470347修复在 raw 表模式下不存在的列上的索引重创建。
3.0.22025-12-0470337重构:将 raw 表模式检查移动到索引创建,以提高代码清晰度。
3.0.12025-12-0470326修复在旧版“仅 Raw 表”模式下运行时的 PSQLException
3.0.02025-12-0369846重大变更:引入 Direct Load 架构。数据现在直接写入最终表,而无需使用中间 raw 表,从而提供更高的性能和更低的存储成本。Raw 表已被弃用;如果需要向后兼容性,请使用“仅 Raw 表”选项。
2.4.72025-08-2965620无操作发布。
2.4.7-rc.12025-08-2965617测试 RC 发布。
2.4.62025-08-2663769修复增量同步中同步为 NULL 值的数字列。
2.4.52025-04-2458652升级库以进行安全补丁
2.4.42025-03-2456355升级到 airbyte/java-connector-base:2.0.1 以兼容 M4。
2.4.32025-02-1453686添加选项以使用无约束的 DECIMAL 类型来表示数字列。
2.4.22025-01-1051483使用非 root 基础镜像
2.4.12024-12-1849885使用基础镜像:airbyte/java-connector-base:1.0.0
2.4.02024-08-18#45434升级所有依赖项。
2.3.22024-08-07#43331提升 java CDK。
2.3.12024-08-07#43363采用最新的 CDK。
2.3.02024-07-22#41954支持 刷新和可恢复的完全刷新。警告:在升级到此连接器版本之前,您必须升级到平台 0.63.7。
2.2.12024-07-22#42423无操作。提升到干净的镜像
2.2.02024-07-22#42423撤销刷新支持
2.1.12024-07-22#42415修复 PostgresSqlOperations.isOtherGenerationIdInTable 以关闭来自 JdbcDatabase.unsafeQuery 的流
2.1.02024-07-22#41954支持 刷新和可恢复的完全刷新。警告:在升级到此连接器版本之前,您必须升级到平台 0.63.7。
2.0.152024-06-26#40554将所有严格加密生产代码转换为 kotlin。
2.0.142024-06-26#40563将所有测试代码转换为 kotlin。
2.0.132024-06-13#40159禁用 cascade 时删除失败的配置错误
2.0.122024-06-12#39388源自动转换为 Kotlin
2.0.112024-06-10#39372修复了函数已存在的错误
2.0.102024-05-07#37660采用 CDK 0.33.2
2.0.92024-04-11#36974添加使用 CASCADE 删除的选项
2.0.82024-04-10#36805采用 CDK 0.29.10 以改进长列名处理
2.0.72024-04-08#36768采用 CDK 0.29.7 以改进目标状态处理
2.0.62024-04-05#36620采用 CDK 0.29.3 以使用 Kotlin CDK
2.0.52024-03-07#35899采用 CDK 0.27.3;修复 v1-v2 迁移中区分大小写的表名,_airbyte_meta 在 raw 表中
2.0.42024-03-07#35899采用 CDK 0.23.18;状态解析中的空安全检查
2.0.32024-03-01#35528采用 CDK 0.23.11;使用迁移框架
2.0.22024-03-01#35760标记为已认证,将 PSQL 异常添加到去插值器
2.0.12024-02-22#35385升级 CDK 至 0.23.0;提前收集所需初始状态
2.0.02024-02-09#35042GA 发布 V2 目标格式。
0.6.32024-02-06#34891删除 varchar 限制,使用系统默认值
0.6.22024-01-30#34683CDK 升级 0.16.3;修复 slf4j lib 中的依赖关系不匹配
0.6.12024-01-29#34630CDK 升级;在 T+D 查询中使用小写 raw 表。
0.6.02024-01-19#34372在规范中添加 dv2 标志
0.5.52024-01-18#34236升级 CDK 至 0.13.1;为查询优化在 raw 表中添加索引
0.5.42024-01-11#34177添加 DV2 beta 的代码(没有用户可见的更改)
0.5.32024-01-10#34135使用上一个版本中遗漏的已发布 CDK
0.5.22024-01-08#33875更新 CDK 以获取隧道心跳功能
0.5.12024-01-04#33873安装规范化以启用 DV2 beta
0.5.02023-12-18#33507升级到最新的 CDK;修复 DAT 和测试
0.4.02023-06-27#27781许可证更新:Elv2
0.3.272023-04-04#24604支持目标检查点
0.3.262022-09-27#17299改进严格加密 postgres 目标的错误处理
0.3.242022-09-08#16046修复缺失的数据库名称 URL 编码
0.3.232022-07-18#16260防止流量在严格加密版本的 postgres 目标上通过不安全的通道
0.3.222022-07-18#13840添加了使用不同 SSL 模式和 SSL 证书连接的能力
0.3.212022-07-06#14479发布 amd64 和 arm64 版本的连接器
0.3.202022-05-17#12820改进了“检查”操作的性能
0.3.192022-04-25#12195添加支持其他 JDBC URL 参数输入
0.3.182022-04-12#11729将 mina-sshd 从 2.7.0 升级到 2.8.0
0.3.172022-04-05#11729修复了模式名称中的破折号错误
0.3.152022-02-25#10421重构 JDBC 参数处理
0.3.142022-02-14#10256(未发布) 添加 -XX:+ExitOnOutOfMemoryError JVM 选项
0.3.132021-12-01#8371修复 ssh 密钥中的不正确的处理 "\n"
0.3.122021-11-08#7719通过基于其字节大小而不是其计数来缓冲记录来改进对宽行的处理
0.3.112021-09-07#5743添加 SSH 隧道支持
0.3.102021-08-11#5336目标 Postgres:修复 \u0000(NULL) 值处理