View a markdown version of this page

SQL Server 到 PostgreSQL 的转换设置 - AWS Database Migration Service

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

SQL Server 到 PostgreSQL 的转换设置

当来源是微软 SQL Server 且目标是亚马逊 RDS for PostgreSQL 或亚马逊 Aurora PostgreSQL 时,以下设置适用。您可以使用 AWS Management Console 或 ModifyConversionConfigurationAPI 操作配置这些设置。

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

使用 API 或 AWS CLI 时,请在部分名称MSSQL_TO_POSTGRESQLMSSQL_TO_POSTGRESQL_14、或下方指定转换路径设置MSSQL_TO_POSTGRESQL_15。所有三个版本控制部分都接受相同的密钥。要查找您的项目使用的部分名称,请DescribeConversionConfiguration先致电并仅更新响应中存在的部分。

每个设置都显示 AWS Management Console 标签,后面是括号中的 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 架构名称。

控制台标签 API/CLI 价值 生成的目标架构名称
数据库架构 DB_SCHEMA database_schema(例如,AdventureWorks_dbo)。在将多个数据库迁移到同一 PostgreSQL 实例时使用,以避免名称冲突。
数据库 DB database(例如,AdventureWorks)。
SCHEMA SCHEMA schema(例如,dbo)。在迁移单个数据库并且想要不带数据库前缀的简洁架构名称时使用。

类型:字符串(枚举)

默认值DB_SCHEMA

SQL 代码设置

控制转换过程中如何处理 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、、VARCHARNCHARNVARCHAR) 映射到相应的 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 设置

以下示例设置了SchemaNameTemplateConvertProceduresToFunction、和UseCitextForAllStringDatatypes。对项目使用的每个部分名称应用相同的设置(请DescribeConversionConfiguration先检查输出)。

{ "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 } }