

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 了解 Oracle 到 PostgreSQL 的转换设置
<a name="schema-conversion-oracle-postgresql"></a>

在 DMS 架构转换中，Oracle 到 PostgreSQL 的转换设置包括以下内容：
+ 要使用生成式人工智能转换适用的数据库对象，请启用**生成式人工智能**设置。通过生成式人工智能成功转换的对象将带有明确的**操作项 5444** 标识，其内容说明为：“本次转换采用机器学习模型，这些模型基于数据中的模式生成预测。” 有关更多信息，请参阅 [使用生成式人工智能转换数据库对象](schema-conversion-convert.databaseobjects.md)。
  + 您可以为目标数据库的多个受支持版本转换架构，而非仅限于最新版本。要指定版本，请使用**目标引擎版本**设置。可用的转换选项将根据您选择的引擎版本而异。目前，支持 PostgreSQL 版本 14 和 15（它们的设置相同）。请注意，在架构转换期间使用与此设置中所指定版本不同的目标引擎版本可能会导致在执行“应用于目标”操作时出现兼容性问题和错误。
+ AWS DMS 可以在 PostgreSQL 上将 Oracle 实例化视图转换为表或实例化视图。对于**实例化视图**，请选择如何转换源实例化视图。
+ 源 Oracle 数据库可以使用 `ROWID` 伪列。PostgreSQL 不支持类似功能。DMS 架构转换可以使用 `bigint` 或 `character varying` 数据类型，在转换后的代码中模拟 `ROWID` 伪列。为此，对于**行 ID**，请选择**使用 bigint 数据类型模拟 ROWID 伪列**或**使用可变字符数据类型模拟 ROWID 伪列**。
  + 要将 NUMBER 数据类型转换为最适合的数值数据类型，根据精度和小数位数，可以选择“对 NUMBER 数据类型的列使用经过优化的数据类型映射”。
+ 如果源 Oracle 代码不使用 `ROWID` 伪列，请选择**不生成**。这种情况下，转换后的代码运行更快。
+ 源 Oracle 代码可以包含 `TO_CHAR`、`TO_DATE` 和 `TO_NUMBER` 函数以及 PostgreSQL 不支持的参数。默认情况下，DMS 架构转换会在转换后的代码中模拟这些参数的用法。

  当源 Oracle 代码缺少 PostgreSQL 不支持的参数时，您可以使用本机 PostgreSQL `TO_CHAR`、`TO_DATE` 和 `TO_NUMBER` 函数。这种情况下，转换后的代码运行更快。为此，可选择以下值：
  + **使用本机 PostgreSQL TO\$1CHAR 函数**
  + **使用本机 PostgreSQL TO\$1DATE 函数**
  + **使用本机 PostgreSQL TO\$1NUMBER 函数**
+ 数据库和应用程序可以运行于不同时区内。默认情况下，DMS 架构转换在转换后的代码中模拟时区。但是，当数据库和应用程序使用相同时区时，您不需要这种模拟。在这种情况下，请选择**在数据库和应用程序使用相同时区的情况下提高转换后的代码的性能**。
+ 要在转换后的代码中继续使用序列，可选择**使用源端生成的最后一个值填充转换后的序列**。
+ 在某些情况下，源 Oracle 数据库在 `NUMBER` 数据类型的主键列或外键列中，可能只存储整数值。在这些情况下， AWS DMS 可以将这些列转换为`BIGINT`数据类型。这种方法可提高转换后的代码的性能。为此，可选择**将 NUMBER 数据类型的主键列和外键列转换为 BIGINT 数据类型**。请确保源代码的这些列中不包含浮点值，以避免数据丢失。
+ 要跳过源代码中已停用的触发器和约束，可选择**仅转换活动触发器和约束**。
+ 可以使用 DMS 架构转换，转换被称为动态 SQL 的字符串变量。数据库代码可以更改这些字符串变量的值。要确保 AWS DMS 始终转换此字符串变量的最新值，请选择 “**转换在调用例程中创建的动态 SQL 代码**”。
+ PostgreSQL 版本 10 及更早版本不支持过程。如果你不熟悉在 PostgreSQL 中使用过程，可以将 Oracle 过程转换为 PostgreSQL AWS DMS 函数。为此，可选择**将过程转换为函数**。
+ 要查看有关已发生操作项的其他信息，您可以向扩展包中添加特定函数。为此，可选择**添加引发用户定义的异常的扩展包函数**。然后，选择引发用户定义的异常的严重性级别。请务必在转换源数据库对象后，应用扩展包架构。有关扩展包的更多信息，请参阅[使用扩展包](extension-pack.md)。
+ 源 Oracle 数据库可以包含具自动生成的名称的约束。如果源代码使用这些名称，请确保选择**保留系统生成的约束的名称**。如果源代码使用了这些约束，但未使用其名称，请清除此选项以提高转换速度。
+ 如果源数据库和目标数据库运行于不同时区内，那么模拟 `SYSDATE` 内置 Oracle 函数的函数返回的值会与源函数有所不同。要确保源函数和目标函数返回相同的值，请选择**设置源数据库的时区**。
+ 您可以在转换后的代码中使用 orafce 扩展中的函数。为此，对于 **Orafce 内置例程**，请选择要使用的函数。有关 orace 的更多信息，请参阅 [or](https://github.com/orafce/orafce) ace on。 GitHub