本部分包含有关以下内容的信息:
- 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 亿行的表:
- 该表具有唯一的 B 树索引。
- 索引不包含以下类型的列:
DOUBLE
、FLOAT
、MONEY
、REAL
、JSON
、JSONB
、BYTEA
、TXID
、XML
或几何数据类型。 - 索引中的所有列均不可为 null。
- 索引的所有列均按升序排列,或者索引的所有列均按降序排列。
- 流中包含索引的所有列。
- 没有主键的表必须具有副本标识。否则,系统只会将
INSERT
事件复制到目标。 - Datastream 无法从读取副本实例进行复制,因为 PostgreSQL 不支持读取副本中的逻辑解码。
- 并非所有对源架构的更改都可以自动检测到,在这种情况下可能会发生数据损坏。以下架构更改可能会导致数据损坏或无法处理下游事件:
- 正在删除列。
- 在表中间添加列。
- 更改列的数据类型。
- 对列重新排序。
- 删除表(如果重新创建相同的表并添加了新数据,则删除这些表)。
- Datastream 不支持
geometric
数据类型的列。 - Datastream 不支持
range
数据类型的列。 - Datastream 不支持不受支持的数据类型的数组、用户定义数据类型(包括
ENUM
)的数组,也不支持DATE
、TIMESTAMP
或TIMESTAMP WITH TIME ZONE
数据类型的数组。系统会忽略此类列。 - 对于属于表副本身份的列,包含
TOAST
值的行,Datastream 不支持复制UPDATE
事件。此类事件会被舍弃。 - Datastream 不支持复制包含
JSON
或JSONB
值且嵌套对象数量超过 2950 的行。包含此类JSON
或JSONB
值的事件不会复制到目标数据库。 - Datastream 不支持复制
NUMERIC (precision, scale)
列中包含NaN
值的行。此类列中的值将替换为NULL
值。 - Datastream 不支持复制 hstore 数据类型的列。此类列中的值会替换为
NULL
值。 - Datastream 不支持需要客户端证书的 SSL/TLS 连接。
- Datastream 不支持从采用 SQL_ASCII 编码的源数据库复制非 ASCII 记录。系统会舍弃此类记录。
- Datastream 不支持复制已定义行级安全 (RLS) 政策的表。如需了解如何绕过此限制,请参阅 PostgreSQL 源行为和限制。
- Datastream 不会捕获对生成的列所做的更改。
后续步骤
- 了解如何配置 PostgreSQL 源 与 Datastream 搭配使用