源 PostgreSQL 数据库

本部分包含有关以下内容的信息:

  • Datastream 处理从源 PostgreSQL 数据库拉取的数据的方式
  • Datastream 支持的 PostgreSQL 数据库的版本
  • 简要介绍如何设置源 PostgreSQL 数据库,以便将数据从该数据库流式传输到目标位置
  • 将 PostgreSQL 数据库用作来源的已知限制

行为

源 PostgreSQL 数据库依赖于其逻辑解码功能。逻辑解码会公开提交到数据库的所有更改,并允许使用输出插件以人性化的格式使用和处理这些更改。Datastream 使用 pgoutput 插件,该插件是 PostgreSQL 10 及更高版本的标准 PostgreSQL 逻辑解码插件。

  • 您可以选择来自给定 PostgreSQL 来源的所有架构或特定架构,以及该架构中的所有表或特定表。
  • 复制所有历史数据。
  • 所有数据操纵语言 (DML) 更改(例如从指定数据库和表进行的插入、更新和删除操作)都会复制。
  • 仅复制已提交的更改。
  • 如果您在表上定义了 REPLICA IDENTITY,则 Datastream 会将指定的列视为主键。

版本

Datastream 支持 PostgreSQL 10 及更高版本。

Datastream 支持以下类型的 PostgreSQL 数据库:

  • 自托管的 PostgreSQL
  • Cloud SQL for PostgreSQL
  • AlloyDB for PostgreSQL
  • AlloyDB Omni
  • Amazon RDS for PostgreSQL
  • Amazon Aurora PostgreSQL

已知限制

将 Datastream 与 PostgreSQL 数据库用作来源的已知限制包括:

  • 数据流限 10,000 个表。
  • 除非满足以下条件,否则无法回填包含超过 5 亿行的表:
    1. 该表具有唯一的 B 树索引。
    2. 索引不包含以下类型的列:DOUBLEFLOATMONEYREALJSONJSONBBYTEATXIDXML几何图形数据类型
    3. 索引的所有列都不是可为 null。
    4. 索引的所有列均按升序排列,索引的所有列均按降序排列。
    5. 流中包含索引的所有列。
  • 没有主键的表必须具有 REPLICA IDENTITY。否则,系统只会将 INSERT 事件复制到目标位置。
  • Datastream 无法从读取副本实例进行复制,因为 PostgreSQL 不支持在读取副本中进行逻辑解码。
  • 并非所有对源架构的更改都可以自动检测到,在这种情况下可能会发生数据损坏。以下架构更改可能会导致数据损坏或无法处理下游事件:
    • 删除列。
    • 在表格中间添加列。
    • 更改列的数据类型。
    • 对列重新排序。
    • 丢弃表(如果然后又添加了新数据重新创建了同一表,则与此相关)。
  • Datastream 不支持 geometric 数据类型的列。
  • Datastream 不支持 range 数据类型的列。
  • Datastream 不支持不受支持的数据类型数组、用户定义的数据类型(包括 ENUM)数组或数据类型为 DATETIMESTAMPTIMESTAMP WITH TIME ZONE 的数组。此类列会被忽略。
  • 如果行是表的副本身份列包含 TOAST 值,则 Datastream 不支持为这些行复制 UPDATE 事件。此类事件会被舍弃。
  • Datastream 不支持复制包含的 JSONJSONB 值以及嵌套对象数量超过 2950 个的行。包含此类 JSONJSONB 值的事件不会复制到目标数据库。
  • Datastream 不支持复制 NUMERIC (precision, scale) 列中包含 NaN 值的行。此类列中的值将替换为 NULL 值。
  • Datastream 不支持复制 hstore 数据类型的列。此类列中的值将替换为 NULL 值。
  • Datastream 不支持需要客户端证书的 SSL/TLS 连接。
  • Datastream 不支持从 SQL_ASCII 编码的源数据库中复制非 ASCII 记录。此类记录将被舍弃。
  • Datastream 不支持复制定义了行级安全 (RLS) 政策的表。 如需了解如何绕过此限制,请参阅 PostgreSQL 源行为和限制
  • Datastream 不会捕获对生成的列所做的更改。