# 限制和考虑事项

在使用 PostgreSQL 源时，应注意以下限制和注意事项：

## 所有数据任务的限制和注意事项

* 数据库名称不能包含分号 (;)。

* 不支持在数据库处于热备用模式时捕获更改。

* 具有相同名称但大小写不同（例如 `table1`、`TABLE1` 和 `Table1`）的多个表的 移动 可能会导致不可预测的行为，因此不受支持。

* 仅自 PostgreSQL 16 起支持 PostgreSQL 读取副本（在高可用性环境中）。

* 不支持 TRUNCATE 操作的更改处理。

* 不支持延迟约束。

* 不支持带有 CASE 表达式的唯一索引。

## 仅登陆任务的限制和注意事项

* 不支持分区表。
* 强制故障转移是 Azure Database for PostgreSQL–Flexible Server 的一项功能。如果来自 Azure Database for PostgreSQL–Flexible Server 的 移动 数据发生强制故障转移，则任务将停止，需要重新创建数据集。

## 复制和登陆任务的限制和注意事项

* REPLICA IDENTITY 支持：

  * 如果使用 FULL，则会复制所有表格列的前映像值。只有使用此模式才能重新定义目标索引。

  * 如果使用 DEFAULT，则仅当表包含主键时才支持复制。此外，将仅复制前映像的主键列。

  * 只有当指定的唯一索引是表的唯一约束（即表没有主键或其他唯一索引）时，才支持使用 INDEX。在这种情况下，对它的支持与上述 DEFAULT 值完全相同。

  * 由于 Qlik Talend Data Integration 不会验证 REPLICA IDENTITY 值，因此请确保您定义了正确的值。

* 不支持“从时间戳开始进程更改”运行选项。

* 支持 [CREATE | ALTER | DROP] 表 DDL 的更改处理，除非它们保存在内部函数/过程体块或其他嵌套结构中。

  例如，将不会捕获以下更改：

  `CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void`

  `LANGUAGE plpgsql`

  `AS $$`

  `BEGIN`

  `       create table attu.distributors1(did    serial PRIMARY KEY,name   varchar(40) NOT NULL); `

  `END;`

  `$$;`

* 涉及两个分区（在分区之间移动记录）的 UPDATE 操作将通过 DELETE 和 INSERT 操作复制到目标表格。如果启用了存储更改复制模式，则 UPDATE 将在相应的更改表中显示为单独的 INSERT 和 DELETE 操作。

* 使用[并行加载](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/Table-settings-replication.htm)特性时，不支持根据分区或子分区进行表分段。

* 当捕获对源表的更改时，只有在 RENAME TABLE 操作之前有 DML 操作时，才会捕获 RENAME TABLE 操作。

* 不支持 PostGIS 数据类型。

* 强制故障转移是 Azure Database for PostgreSQL–Flexible Server 的一项功能。如果来自 Azure Database for PostgreSQL–Flexible Server 的 移动 数据发生强制故障转移，则任务将停止，需要重新加载数据集。

* PostgreSQL 15.x 中引入的 SQL MERGE 命令尚未经过认证。

## 不受支持的数据类型

不支持以下数据类型：

* PostGIS

* INT4MULTIRANGE

* INT8MULTIRANGE

* NUMMULTIRANGE

* TSMULTIRANGE