

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

# 了解 SQL Server 到 PostgreSQL 的转换设置
<a name="schema-conversion-sql-server-postgresql"></a>

在 DMS 架构转换中，SQL Server 到 PostgreSQL 的转换设置包括以下内容：
+ 要使用生成式人工智能转换适用的数据库对象，请启用**生成式人工智能**设置。通过生成式人工智能成功转换的对象将带有明确的**操作项 7744** 标识，其内容说明为：“本次转换采用机器学习模型，这些模型基于数据中的模式生成预测。” 有关更多信息，请参阅 [使用生成式人工智能转换数据库对象](schema-conversion-convert.databaseobjects.md)。
+ 在 SQL Server 中，可以在不同表中使用名称相同的索引。但是，在 PostgreSQL 中，在架构中使用的所有索引名称必须是唯一的。要确保 DMS 架构转换为所有的索引生成唯一名称，可选择**为索引生成唯一名称**。
+ PostgreSQL 版本 10 及更早版本不支持过程。如果你不熟悉在 PostgreSQL 中使用过程，可以将 SQL Server 过程转换为 Postgre AWS DMS SQL 函数。为此，可选择**将过程转换为函数**。
+ 源 SQL Server 数据库可以将 `EXEC` 的输出存储在表中。DMS 架构转换创建临时表和一个额外的过程来模拟此功能。要使用此模拟，可选择**创建额外的例程处理开放数据集**。
+ 您可以定义模板，用于转换后的代码中的架构名称。对于**架构名称**，请选择下列选项之一：
  + **DB** – 使用 SQL Server 数据库名称作为 PostgreSQL 中的架构名称。
  + **SCHEMA** – 使用 SQL Server 架构名称作为 PostgreSQL 中的架构名称。
  + **DB\$1SCHEMA** – 使用 SQL Server 数据库名称和架构名称的组合作为 PostgreSQL 中的架构名称。
+ 您可以在源操作数的名称中保留字母大小写。要避免将操作数名称转换为小写，请选择**避免将区分大小写的操作转换为小写**。只有在源数据库中启用了区分大小写功能时，此选项才适用。
+ 您可以保留源数据库中的参数名称。DMS 架构转换可以在转换后的代码中，为参数名称添加双引号。为此，可选择**保留原始参数名称**。
+ 您可以从源数据库中保留一定长度的例程参数。DMS 架构转换会创建域并使用它们来指定例程参数的长度。为此，请选择**保留参数长度**。
+ 要将不支持的内置对象转换为存根对象，请启用**将不支持的内置对象转换为存根对象**设置：
  +  启用后，DMS SC 会将目标数据库中不支持的内置对象替换为相应的存根对象。此功能可转换通常包含在迁移问题 7811 或 7904 中的代码部分。它根据源内置对象的类型创建对应的存根对象：过程对应 `PROCEDURE` 类型，视图或表格则对应 `VIEW` 类型。

    通过调用不支持的对象对源数据库对象进行转换会导致调用存根对象和迁移问题 7822。

    通过启用**在单独的架构中创建存根对象**选项，您可以选择在单独的架构中创建存根对象。选中后，将在目标数据库中命为 `aws_sqlserver_stub` 的特殊架构中创建存根对象。如果未选中，则它们将在与调用对象相同的架构中创建。
  + 存根例程是根据原始内置函数的完全限定名称命名的。对于存根视图，命名约定包括系统架构名称 `system_schema_name$builtin_view_name`。

    在重新转换期间，DMS SC 会检查目标数据库中是否存在现有的存根例程。如果已经存在同名和输入参数相同的例程，则该例程不会被覆盖。

    转换后，根据需要查看和实现存根例程的自定义代码。
+ 在 DMS 架构转换中，所有字符串数据类型设置的 `CITEXT` 数据类型包括以下内容：
  + 要在从 SQL Server 转换为 PostgreSQL 时使用 `CITEXT` 数据类型进行不区分大小写的字符串操作，请启用**对所有字符串数据类型使用 CITEXT** 设置。从不区分大小写的 SQL Server 迁移到区分大小写的 PostgreSQL 环境时，此选项有助于保持行为的一致性。
  + 启用后，DMS SC 会将源 SQL Server 数据库中的所有相关字符串数据类型转换为 PostgreSQL 中的 `CITEXT`。这样就无需在条件中显式调用 LOWER () 函数，并自动将条件运算中的字符串表达式转换为 `CITEXT`。
  + 要确定您的 SQL Server 实例是否区分大小写，请运行以下查询：

    ```
    SELECT SERVERPROPERTY('COLLATION');
    ```

    包含“CI”的结果表示不区分大小写，而“CS”表示区分大小写。
  + 如果在服务器、数据库或列级别使用了区分大小写的显式整理设置，则 `CITEXT` 转换可能不适用。

    要使用此功能，请确保 `CITEXT` 模块已安装并在目标 PostgreSQL 数据库中可用。
  + 在使用 `CITEXT` 数据类型转换时，请考虑以下最佳实践：
    + 从不区分大小写的 SQL Server 迁移时，启用此功能可保持 PostgreSQL 中行为的一致性。
    + 检查您的应用程序代码，确保它不依赖区分大小写的字符串操作。
    + 迁移后，请全面测试您的应用程序，以验证其不区分大小写的行为是否按预期得以保持。