

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

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

当来源是微软 SQL Server 且目标是亚马逊 RDS for PostgreSQL 或亚马逊 Aurora PostgreSQL 时，以下设置适用。您可以使用 AWS 管理控制台 或 [`ModifyConversionConfiguration`](https://docs.aws.amazon.com/dms/latest/APIReference/API_ModifyConversionConfiguration.html)API 操作配置这些设置。

本主题介绍特定于 SQL Server 到 PostgreSQL 转换路径的设置。除了这些设置外，DMS Schema Conversion 还提供适用于所有源和目标对的设置，例如转换后的 SQL 中操作项注释的严重性级别以及使用生成式 AI 进行转换的选项。有关这些设置，请参阅[常用转换设置](schema-conversion-settings.md#schema-conversion-settings-common)。

使用 API 或 AWS CLI 时，请在部分名称`MSSQL_TO_POSTGRESQL``MSSQL_TO_POSTGRESQL_14`、或下方指定转换路径设置`MSSQL_TO_POSTGRESQL_15`。所有三个版本控制部分都接受相同的密钥。要查找您的项目使用的部分名称，请[`DescribeConversionConfiguration`](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeConversionConfiguration.html)先致电并仅更新响应中存在的部分。

每个设置都显示 AWS 管理控制台 标签，后面是括号中的 AP AWS I 和 CLI 参数名称。使用 API 或 AWS CLI 配置设置时，请使用参数名称。

控制转换期间如何处理源 SQL Server 元数据（对象名称、架构结构和索引定义）的设置。

**将源数据库对象名称视为区分大小写** (`CaseSensitivityNames`)  
控制转换期间如何处理对象名称（表、列、过程等）。  
+ `true`— 对象名称保留其原始大小写并用双引号标识符包裹（例如，`"MyTable"`）。当您的应用程序使用大小写混合的名称引用对象时，请使用此选项。
+ `false`— 将对象名称折叠成小写而不加引号（例如，`mytable`）。这与 PostgreSQL 的默认大小写折叠行为相匹配。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`

**为索引生成唯一名称** (`UniqueIndexGeneration`)  
控制 DMS 架构转换是否在目标 PostgreSQL 架构中生成唯一的索引名称。在 SQL Server 中，索引可以在不同的表中使用相同的名称。在 PostgreSQL 中，架构中的所有索引名称都必须是唯一的。  
+ `true`— DMS 架构转换为所有索引生成唯一的名称，并在必要时附加后缀以避免冲突。当您的源架构在不同的表上具有相同名称的索引时，请使用此选项。
+ `false`— 索引名称按原样保存在源代码中。如果多个表上存在相同的索引名称，则部署到 PostgreSQL 可能会失败，并出现重名错误。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`true`

**将过程转换为函数** (`ConvertProceduresToFunction`)  
控制存储过程是转换为 PostgreSQL 函数还是过程。  
+ `false`— 过程转换为 PostgreSQL 对象（需要 `PROCEDURE` PostgreSQL 11 或更高版本）。
+ `true`— 返回结果集的过程将转换为 Po `FUNCTION` stgreSQL 对象。当您的应用程序从过程调用中读取结果集或以 PostgreSQL 10 或更早版本为目标时，请使用此选项。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`

**创建其他例程来处理打开的数据集** () `OpenDatasetsProcedures`  
控制如何转换`EXEC`将的输出存储到表中的过程。  
+ `false`— 这些模式留作操作项目。
+ `true`— DMS 架构转换会创建临时表和用于在目标上模拟此模式的附加过程。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`

**架构名称** (`SchemaNameTemplate`)  
控制如何根据 SQL Server 由两部分组成的命名约定（数据库 \+ 架构）生成目标 PostgreSQL 架构名称。      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/schema-conversion-sql-server-postgresql.html)
**类型：**字符串（枚举）  
**默认值**：`DB_SCHEMA`

控制转换过程中如何处理 SQL Server 代码（标识符、参数、数据类型和不支持的函数）的设置。

**保持对象名称的大小写相同** (`AvoidCastingToLowerCase`)  
控制 DMS 架构转换是否在转换后的代码中添加标识符周围的自动`LOWER()`强制转换。  
+ `false`— DMS 架构转换在需要时添加`LOWER()`强制转换以标准化大小写比较。
+ `true`— 未添加自动`LOWER()`施法。当您的 PostgreSQL 数据库使用扩展名或不区分大小写`citext`的排序规则以本地方式处理比较时，请使用此选项。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`  
启用后`UseCitextForAllStringDatatypes`，此设置不起作用。当所有字符串类型都映射到时`CITEXT`，不区分大小写的比较由类型本身处理，因此无论此设置如何，都不会生成`LOWER()`强制转换。

**保留原始参数名** (`KeepOriginalParameterManes`)  
控制是否将 T-SQL 例程中的原始参数名称保留在转换后的 PostgreSQL 例程签名中。  
+ `false`— 为了避免与 PostgreSQL 保留字或命名约定发生冲突，可以对参数进行重命名。
+ `true`— 原始参数名称保持不变。当您的应用程序使用命名参数语法（例如`my_proc(param_name => value)`）调用例程时，请使用此选项。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`  
API 参数名称是`KeepOriginalParameterManes`（以 *Manes* 结尾，而不是*名称*）。在调用 API 或 AWS CLI 时，请使用此精确拼写。使用`KeepOriginalParameterNames`将不起作用。

**对所有字符串数据类型使用 CITEX** T () `UseCitextForAllStringDatatypes`  
控制所有字符列和参数的目标数据类型。  
+ `false`— 字符类型 (`CHAR`、、`VARCHAR``NCHAR`、`NVARCHAR`) 映射到相应的 PostgreSQL 类型。
+ `true`— 所有字符类型都映射到`CITEXT`（不区分大小写的文本）。从不区分大小写的 SQL Server 归类中迁移时，请使用此选项，并且您希望在不修改查询的情况下在 PostgreSQL 中保留该行为。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`  
启用此设置后，DMS 架构转换会自动`CREATE EXTENSION IF NOT EXISTS citext;`添加到转换后的架构脚本中（无论是在应用于目标脚本还是保存到文件时）。但是，在应用转换后的架构之前，该`citext`模块必须在目标 PostgreSQL 数据库中可用。  
启用后`UseCitextForAllStringDatatypes`，“**保持对象名称大小写相同”** (`AvoidCastingToLowerCase`) 设置将不起作用，因为本机`CITEXT`处理不区分大小写的比较。

**将不支持的内置对象转换为存根对象 ()** `ConvUnsupportedBuiltinsToStubs`  
控制当 DMS 架构转换遇到没有直接的 PostgreSQL 等效函数的 T-SQL 内置函数时会发生什么。  
+ `false`— 不支持的功能将作为措施项保留在评估报告中。转换后的对象被标记为需要手动审查。
+ `true`— 将不支持的函数替换为具有相同签名但会引发运行时错误的存根函数。转换后的对象成功编译，允许您在处理单个存根之前部署和测试架构的其余部分。存根函数会生成迁移问题 7822。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`

在@@ **单独的架构中创建存根对象** () `CreateStubsInSeparateSchema`  
控制启用时`ConvUnsupportedBuiltinsToStubs`存根对象的放置位置。  
+ `false`— 存根对象在与调用对象相同的架构中创建。
+ `true`— 存根对象放置在目标上的专用`aws_sqlserver_stub`架构中。使用它可以将存根代码与转换后的应用程序对象隔离开来。
**类型：**布尔值 (`true`\|`false`)  
**默认值**：`false`

## 示例：将 SQL Server 配置为 PostgreSQL 设置
<a name="schema-conversion-sql-server-postgresql-example"></a>

以下示例设置了`SchemaNameTemplate``ConvertProceduresToFunction`、和`UseCitextForAllStringDatatypes`。对项目使用的每个部分名称应用相同的设置（请[`DescribeConversionConfiguration`](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeConversionConfiguration.html)先检查输出）。

```
{
  "MSSQL_TO_POSTGRESQL_15": {
    "SchemaNameTemplate": "SCHEMA",
    "ConvertProceduresToFunction": true,
    "UseCitextForAllStringDatatypes": true
  },
  "MSSQL_TO_POSTGRESQL_14": {
    "SchemaNameTemplate": "SCHEMA",
    "ConvertProceduresToFunction": true,
    "UseCitextForAllStringDatatypes": true
  },
  "MSSQL_TO_POSTGRESQL": {
    "SchemaNameTemplate": "SCHEMA",
    "ConvertProceduresToFunction": true,
    "UseCitextForAllStringDatatypes": true
  }
}
```