

# 将 Babelfish 升级到新的主要版本
<a name="babelfish-information-upgrading-major"></a>

要进行主要版本升级，您需要先将适用于 Aurora PostgreSQL 的 Babelfish 数据库集群升级到支持主要版本升级的版本。要实现此目的，请对数据库集群应用补丁更新或次要版本升级。有关更多信息，请参阅 [将 Babelfish 升级到新的次要版本](babelfish-information-upgrading-minor.md)。

下表显示了可以支持主要版本升级的 Aurora PostgreSQL 版本和 Babelfish 版本。


| 当前源版本 | 最新升级目标 | 
| --- | --- | 
| Aurora PostgreSQL（Babelfish）  | Aurora PostgreSQL（Babelfish）  | 
|  16.9（4.6.0）  |  17.5（5.2.0）  | 
|  16.8（4.5.0）  |  17.5（5.2.0）、17.4（5.1.0）  | 
|  16.6（4.4.0）  |  17.5（5.2.0）、17.4（5.1.0）  | 
|  16.4（4.3.0）  |  17.5（5.2.0）、17.4（5.1.0）  | 
|  16.3（4.2.0）  |  17.5（5.2.0）、17.4（5.1.0）  | 
|  16.2（4.1.0）  |  17.5（5.2.0）、17.4（5.1.0）  | 
|  16.1（4.0.0）  |  17.5（5.2.0）、17.4（5.1.0）  | 
|  15.13（3.10）  |  17.5（5.2.0） 16.9（4.6.0）  | 
|  15.12（3.9.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）  | 
|  15.10（3.8.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）  | 
|  15.8（3.7.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）  | 
|  15.7（3.6.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）  | 
|  15.6（3.5.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）  | 
|  15.5（3.4.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0）  | 
|  15.4（3.3.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0）  | 
|  15.3（3.2.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0）  | 
|  15.2（3.1.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0）  | 
|  14.18（2.13.0）  |  17.5（5.2.0） 16.9（4.6.0） 15.13（3.10.0）  | 
|  14.17（2.12.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0） 15.13（3.10.0）、15.12（3.9.0）  | 
|  14.15（2.11.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）  | 
|  14.13（2.10.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）  | 
|  14.12（2.9.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）  | 
|  14.11（2.8.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）、15.6（3.5.0）  | 
|  14.10（2.7.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）、15.6（3.5.0）、15.5（3.4.0）  | 
|  14.9（2.6.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）、15.6（3.5.0）、15.5（3.4.0）、15.4（3.3.0）  | 
|  14.8（2.5.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）、15.6（3.5.0）、15.5（3.4.0）、15.4（3.3.0）、15.3（3.2.0）  | 
|  14.7（2.4.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）、15.6（3.5.0）、15.5（3.4.0）、15.4（3.3.0）、15.3（3.2.0）、15.2（3.1.0）  | 
|  14.6（2.3.0）  |  17.5（5.2.0）、17.4（5.1.0） 16.9（4.6.0）、16.8（4.5.0）、16.6（4.4.0）、16.4（4.3.0）、16.3（4.2.0）、16.2（4.1.0）、16.1（4.0.0） 15.13（3.10.0）、15.12（3.9.0）、15.10（3.8.0）、15.8（3.7.0）、15.7（3.6.0）、15.6（3.5.0）、15.5（3.4.0）、15.4（3.3.0）、15.3（3.2.0）、15.2（3.1.0）  | 
|  13.9（1.5.0）  |  14.6（2.3.0）  | 
|  13.8（1.4.0）  | 14.6（2.3.0） | 
|  13.7（1.3.0）  |  14.6（2.3.0）  | 

## 在将 Babelfish 升级到新的主要版本之前
<a name="babelfish-information-upgrading-preliminary"></a>

升级可能涉及短暂的中断。因此，建议您在维护时段或利用率低的其他时段执行或安排升级。

**在执行主要版本升级之前**

 

1. 使用 [确定您的 Babelfish 版本](babelfish-information-identify-version.md) 中概述的命令识别现有 Aurora PostgreSQL 数据库集群的 Babelfish 版本。Aurora PostgreSQL 版本和 Babelfish 版本信息由 PostgreSQL 处理，因此请按照 [To use the PostgreSQL port to query for version information](babelfish-information-identify-version.md#apg-version-info-psql) 过程中详细介绍的步骤获取详细信息。

1. 验证您的版本是否支持主要版本升级。有关支持主要版本升级功能的版本列表，请参阅 [将 Babelfish 升级到新的次要版本](babelfish-information-upgrading-minor.md) 并执行必要的升级前任务。

    例如，如果 Babelfish 版本在 Aurora PostgreSQL 13.5 数据库集群上运行并且您要升级到 Aurora PostgreSQL 15.2，则首先应用所有次要版本和补丁，以将集群升级到 Aurora PostgreSQL 14.6 或更高版本。当您的集群版本为 14.6 或更高版本时，继续执行主要版本升级过程。

1. 创建当前 Babelfish 数据库集群的手动快照作为备份。备份允许您将集群还原到其 Aurora PostgreSQL 版本、Babelfish 版本，并将所有数据还原到升级前的状态。有关更多信息，请参阅[创建数据库集群快照](USER_CreateSnapshotCluster.md)。如果您决定将此集群还原到其升级前的状态，请务必保留现有的自定义数据库集群参数组以供再次使用。有关更多信息，请参阅[从数据库集群快照还原](aurora-restore-snapshot.md)和[参数组注意事项](aurora-restore-snapshot.md#aurora-restore-snapshot.Parameters)。

1. 为目标 Aurora PostgreSQL 数据库版本准备自定义数据库集群参数组。从您当前的适用于 Aurora PostgreSQL 的 Babelfish 数据库集群中复制 Babelfish 参数的设置。要找到所有 Babelfish 参数的列表，请参阅 [Babelfish 的数据库集群参数组设置](babelfish-configuration.md)。对于主要版本升级，以下参数需要与源数据库集群相同的设置。要使升级获得成功，所有设置都必须相同。
   + rds.babelfish\$1status
   + babelfishpg\$1tds.tds\$1default\$1numeric\$1precision
   + babelfishpg\$1tds.tds\$1default\$1numeric\$1scale
   + babelfishpg\$1tsql.database\$1name
   + babelfishpg\$1tsql.default\$1locale
   + babelfishpg\$1tsql.migration\$1mode
   + babelfishpg\$1tsql.server\$1collation\$1name
**警告**  
如果新 Aurora PostgreSQL 版本的自定义数据库集群参数组中 Babelfish 参数的设置与您正在升级的集群的参数值不匹配，则 `ModifyDBCluster` 操作将失败。`InvalidParameterCombination` 错误消息出现在 AWS 管理控制台 或 `modify-db-cluster` AWS CLI 命令的输出中。

1. 使用 AWS 管理控制台 或 AWS CLI 创建自定义数据库集群参数组。为您要升级的 Aurora PostgreSQL 版本选择适用的 Aurora PostgreSQL 系列。
**提示**  
参数组在 AWS 区域 级别进行管理。使用 AWS CLI 时，您可以使用默认区域进行配置，而不是在命令中指定 `--region`。要了解有关使用 AWS CLI 的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[快速设置](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)。

## 执行主要版本升级
<a name="babelfish-performing-major-version-upgrade"></a>

1. 将 Aurora PostgreSQL 数据库集群升级到新的主要版本。有关更多信息，请参阅 [将 Aurora PostgreSQL 引擎升级到新的主要版本](USER_UpgradeDBInstance.PostgreSQL.MajorVersion.md#USER_UpgradeDBInstance.Upgrading.Manual)。

1. 重启集群的写入器实例，以便参数设置生效。

## 在升级到新的主要版本之后
<a name="babelfish-information-upgrading-post-upgrade"></a>

在主要版本升级到新的 Aurora PostgreSQL 版本后，带有 `IDENTITY` 列的表中的 `IDENTITY` 值可能比升级前的值更大（\$132）。结果是，当将下一行插入到此类表中时，生成的身份列值会跳至 \$132 数字并从那里开始序列。这种情况不会对 Babelfish 数据库集群的功能产生负面影响。但如果需要，可以根据列的最大值重置序列对象。为此，请使用 `sqlcmd` 或另一个 SQL Server 客户端连接到 Babelfish 写入器实例上的 T-SQL 端口。有关更多信息，请参阅 [使用 SQL Server 客户端连接到数据库集群](babelfish-connect-sqlserver.md)。

```
sqlcmd -S bfish-db.cluster-123456789012.aws-region.rds.amazonaws.com,1433 -U
     sa -P ******** -d dbname
```

连接后，使用以下 SQL 命令生成可用于为关联序列对象做种子的语句。此 SQL 命令同时适用于单一数据库和多数据库 Babelfish 配置。有关这两种部署模型的更多信息，请参阅 [将 Babelfish 与单个数据库或多个数据库结合使用](babelfish-architecture.md#babelfish-single_vs_multi_db)。

```
DECLARE @schema_prefix NVARCHAR(200) = ''
IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db'
    SET @schema_prefix = db_name() + '_'
SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id)
    + '.' + tables.name + ''', ''' + columns.name + '''),(select max(' + columns.name + ')
    FROM ' + schema_name(tables.schema_id) + '.' + tables.name + '));
    'FROM sys.tables tables JOIN sys.columns
    columns ON tables.object_id = columns.object_id
    WHERE columns.is_identity = 1
GO
```

该查询会生成一系列 SELECT 语句，然后您可以运行这些语句来重置最大 IDENTITY 值并缩小任何差距。下面显示了使用在 Babelfish 集群上运行的示例 SQL Server 数据库 Northwind 时的输出。

```
--------------------------------------------------------
SELECT setval(pg_get_serial_sequence('northwind_dbo.categories', 'categoryid'),(select max(categoryid)
    FROM dbo.categories));

SELECT setval(pg_get_serial_sequence('northwind_dbo.orders', 'orderid'),(select max(orderid)
    FROM dbo.orders));
                                                                                                                        
SELECT setval(pg_get_serial_sequence('northwind_dbo.products', 'productid'),(select max(productid)
    FROM dbo.products));
                                                                                                                        
SELECT setval(pg_get_serial_sequence('northwind_dbo.shippers', 'shipperid'),(select max(shipperid)
    FROM dbo.shippers));
                                                                                                                        
SELECT setval(pg_get_serial_sequence('northwind_dbo.suppliers', 'supplierid'),(select max(supplierid)
    FROM dbo.suppliers));
                                                                                                                        
(5 rows affected)
```

逐条运行语句以重置序列值。

## 示例：将 Babelfish 数据库集群升级到主要版本
<a name="babelfish-information-upgrading-example"></a>

 在此示例中，您可以找到一系列 AWS CLI 命令，这些命令解释了如何将运行 Babelfish 版本 1.2.2 的 Aurora PostgreSQL 13.6.4 数据库集群升级到 Aurora PostgreSQL 14.6。首先，为 Aurora PostgreSQL 14 创建一个自定义数据库集群参数组。接下来，修改参数值，使其与 Aurora PostgreSQL 版本 13 源中的参数值相匹配。最后，您可以通过修改源集群来执行升级。有关更多信息，请参阅 [Babelfish 的数据库集群参数组设置](babelfish-configuration.md)。在该主题中，您还可以找到有关使用 AWS 管理控制台 执行升级的信息。

使用 [create-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster-parameter-group.html) CLI 命令为新版本创建数据库集群参数组。

对于 Linux、macOS 或 Unix：

```
aws rds create-db-cluster-parameter-group \
    --db-cluster-parameter-group-name docs-lab-babelfish-apg-14 \
    --db-parameter-group-family aurora-postgresql14 \
    --description 'New custom parameter group for upgrade to new major version' \
    --region us-west-1
```

当您发出此命令时，将在 AWS 区域 中创建自定义数据库集群参数组。您将看到类似以下内容的输出。

```
{
    "DBClusterParameterGroup": {
        "DBClusterParameterGroupName": "docs-lab-babelfish-apg-14",
        "DBParameterGroupFamily": "aurora-postgresql14",
        "Description": "New custom parameter group for upgrade to new major version",
        "DBClusterParameterGroupArn": "arn:aws:rds:us-west-1:111122223333:cluster-pg:docs-lab-babelfish-apg-14"
    }
}
```

有关更多信息，请参阅[在 Amazon Aurora 中创建数据库集群参数组](USER_WorkingWithParamGroups.CreatingCluster.md)。

使用 [modify-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster-parameter-group.html) CLI 命令修改设置，使其与源集群相匹配。

对于：Windows

```
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name docs-lab-babelfish-apg-14 ^
  --parameters "ParameterName=rds.babelfish_status,ParameterValue=on,ApplyMethod=pending-reboot" ^
 "ParameterName=babelfishpg_tds.tds_default_numeric_precision,ParameterValue=38,ApplyMethod=pending-reboot" ^
 "ParameterName=babelfishpg_tds.tds_default_numeric_scale,ParameterValue=8,ApplyMethod=pending-reboot" ^
 "ParameterName=babelfishpg_tsql.database_name,ParameterValue=babelfish_db,ApplyMethod=pending-reboot" ^
 "ParameterName=babelfishpg_tsql.default_locale,ParameterValue=en-US,ApplyMethod=pending-reboot" ^
 "ParameterName=babelfishpg_tsql.migration_mode,ParameterValue=single-db,ApplyMethod=pending-reboot" ^
 "ParameterName=babelfishpg_tsql.server_collation_name,ParameterValue=sql_latin1_general_cp1_ci_as,ApplyMethod=pending-reboot"
```

响应类似于以下内容。

```
{
    "DBClusterParameterGroupName": "docs-lab-babelfish-apg-14"
}
```

使用 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) CLI 命令修改集群，以使用新版本和新的自定义数据库集群参数组。您还可指定 `--allow-major-version-upgrade` 参数，如以下示例中所示。

```
aws rds modify-db-cluster \
--db-cluster-identifier docs-lab-bfish-apg-14 \
--engine-version 14.6 \
--db-cluster-parameter-group-name docs-lab-babelfish-apg-14 \
--allow-major-version-upgrade \
--region us-west-1 \
--apply-immediately
```

使用 [reboot-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/reboot-db-instance.html) CLI 命令重启集群的写入器实例，以便参数设置生效。

```
aws rds reboot-db-instance \
--db-instance-identifier docs-lab-bfish-apg-14-instance-1\
--region us-west-1
```