Amazon RDS for PostgreSQL
Amazon RDS 支持运行多种 PostgreSQL 版本的数据库实例。有关可用版本列表,请参阅可用的 PostgreSQL 数据库版本。
定于 2022 年 4 月 26 日弃用 PostgreSQL 9.6。有关更多信息,请参阅弃用 PostgreSQL 版本 10 弃用 PostgreSQL 版本 9.6。
可创建数据库实例和数据库快照、时间点还原和备份。运行 PostgreSQL 的数据库实例支持多可用区部署、只读副本、预置 IOPS,可以在 Virtual Private Cloud (VPC) 内创建此类数据库实例。您还可以使用安全套接字层 (SSL) 连接到运行 PostgreSQL 的数据库实例。
创建数据库实例之前,确保完成 设置 Amazon RDS 中的步骤。
您可以使用任何标准 SQL 客户端应用程序从客户端计算机对实例运行命令。此类应用程序包括 pgAdmin(用于 PostgreSQL 的流行开源管理和开发工具)或 psql(PostgreSQL 安装包含的命令行实用程序)。为了提供托管服务体验,Amazon RDS 未提供数据库实例的主机访问权限。并且它还限制了对需要高级权限的某些系统程序和表的访问。Amazon RDS 支持使用任何标准 SQL 客户端应用程序访问数据库实例上的数据库。Amazon RDS 不允许使用远程登录或安全外壳(SSH)直接从主机进行访问数据库实例。
Amazon RDS for PostgreSQL 符合很多行业标准。例如,您可以使用 Amazon RDS for PostgreSQL 数据库构建符合 HIPAA 标准的应用程序,并存储与医疗保健相关的信息。这包括根据与 AWS 签订的完整业务合作协议 (BAA) 存储受保护的健康信息 (PHI)。Amazon RDS for PostgreSQL 还满足联邦风险与授权管理项目(FedRAMP)安全要求。在AWS GovCloud (US)区域中,Amazon RDS for PostgreSQL 获得了 FedRAMP 联合授权委员会(JAB)的 FedRAMP 高基准临时授权操作(P-ATO)。有关支持的合规性标准的更多信息,请参阅AWS云合规性
要将 PostgreSQL 数据导入到数据库实例中,请按将数据导入 Amazon RDS 上的 PostgreSQL一节中的信息操作。
主题
- Amazon RDS for PostgreSQL 的常见管理任务
- 使用数据库预览环境
- 数据库预览环境中的 PostgreSQL 版本 15
- 可用的 PostgreSQL 数据库版本
- 支持的 PostgreSQL 扩展版本
- 连接到运行 PostgreSQL 数据库引擎的数据库实例
- 使用 SSL/TLS 保护与 RDS for PostgreSQL 的连接
- 在 Amazon RDS for PostgreSQL 中使用 Kerberos 身份验证
- 将自定义 DNS 服务器用于出站网络访问
- 升级适用于 Amazon RDS 的 PostgreSQL 数据库引擎
- 升级 PostgreSQL 数据库快照引擎版本
- 使用 Amazon RDS for PostgreSQL 只读副本
- 将数据导入 Amazon RDS 上的 PostgreSQL
- 将数据从 RDS for PostgreSQL 数据库实例导出到 Amazon S3
- 从 RDS for PostgreSQL 数据库实例中调用 AWS Lambda 函数
- 使用 Amazon RDS for PostgreSQL 支持的 PostgreSQL 功能
- Amazon RDS for PostgreSQL 的数据库管理员常见任务
- 使用 RDS for PostgreSQL 的等待事件进行优化
- 将 PostgreSQL 扩展与 Amazon RDS for PostgreSQL 结合使用
- 使用 Amazon RDS for PostgreSQL 支持的外部数据包装器
- 使用适用于 PostgreSQL 的可信语言扩展
Amazon RDS for PostgreSQL 的常见管理任务
下面是对 Amazon RDS for PostgreSQL 数据库实例执行的常见管理任务,以及有关每个任务的相关文档的链接。
任务区域 | 相关文档 |
---|---|
设置 Amazon RDS 供首次使用 创建数据库实例之前,确保完成一些先决条件。例如,默认情况下,数据库实例在创建后带有一个阻止对其进行访问的防火墙。因此,您需要使用正确的 IP 地址和网络配置创建安全组来访问数据库实例。 |
|
了解 Amazon RDS 数据库实例 如果您出于生产目的而创建数据库实例,则应该了解 Amazon RDS 中的实例类、存储类型和配置的 IOPS 的工作原理。 |
|
查找可用的 PostgreSQL 版本 Amazon RDS 支持 PostgreSQL 的多个版本。 |
|
设置高可用性和故障转移支持 生产数据库实例应使用多可用区部署。多可用区部署为数据库实例提供了更高的可用性、数据持久性和容错能力。 |
|
了解 Amazon Virtual Private Cloud (VPC) 网络 如果您的 AWS 账户具有默认 VPC,则自动在默认 VPC 中创建数据库实例。在某些情况下,您的账户可能没有默认 VPC,并且您可能希望在 VPC 中使用数据库实例。在这些情况下,请在创建数据库实例之前创建 VPC 和子网组。 |
|
将数据导入 Amazon RDS PostgreSQL 您可以使用多种不同的工具将数据导入 Amazon RDS 中的 PostgreSQL 数据库实例。 |
|
设置只读副本(主和备用) RDS for PostgreSQL 支持来自主实例的同一 AWS 区域和不同 AWS 区域的只读副本。 |
|
了解安全组 默认情况下,数据库实例在创建时带有一个防火墙,这个防火墙会阻止对实例进行访问。要通过该防火墙提供访问权限,您需要编辑与托管数据库实例的 VPC 关联的 VPC 安全组的入站规则。 |
|
设置参数组和功能 要更改数据库实例的默认参数,请创建自定义数据库参数组并将设置更改为该参数组。如果您在创建数据库实例之前执行此操作,则可以在创建实例时选择自定义数据库参数组。 |
|
连接到您的 PostgreSQL 数据库实例 在创建安全组并将其与数据库实例关联后,您可以使用任何标准 SQL 客户端应用程序(如 |
|
备份和还原数据库实例 您可以配置数据库实例以采用自动备份或采用手动快照,然后从备份或快照还原实例。 |
|
监控数据库实例的活动和性能 您可以使用 CloudWatch Amazon RDS 指标、事件和增强监控来监控 PostgreSQL 数据库实例。 |
|
升级 PostgreSQL 数据库版本 您可以对 PostgreSQL 数据库实例同时执行主要和次要版本升级。 |
|
使用日志文件 您可以访问 PostgreSQL 数据库实例的日志文件。 |
|
了解 PostgreSQL 数据库实例的最佳实践 查找在 Amazon RDS 上使用 PostgreSQL 的一些最佳实践。 |
以下是本指南中可以帮助您了解和使用 RDS for PostgreSQL 的重要功能的其他章节列表:
使用数据库预览环境
PostgreSQL 社区会不断发布新的 PostgreSQL 版本和扩展,包括测试版。这让 PostgreSQL 用户有机会尽早试用新的 PostgreSQL 版本。要了解有关 PostgreSQL 社区测试版发布流程的更多信息,请参阅 PostgreSQL 文档中的测试版信息
数据库预览环境中的 RDS for PostgreSQL 数据库实例在功能上类似于其他 RDS for PostgreSQL 实例。但是,不能将预览版用于生产。
请注意以下重要限制:
-
所有数据库实例在创建之后的 60 天删除,包括其所有备份和快照。
-
您只能在 Virtual Private Cloud (VPC) 中创建基于 Amazon VPC 服务的数据库实例。
-
您只能使用通用 SSD 和预置 IOPS SSD 存储。
-
您无法从 AWS Support 获得数据库实例的帮助。而是可以将您的问题发布到 AWS 托管的问答社群,即 AWS re:Post
。 -
您无法将数据库实例的快照复制到生产环境。
预览版支持以下选项:
-
只能使用 M6i、R6i、M6g、M5、T3、R6g 和 R5 实例类型创建数据库实例。有关 RDS 实例类的更多信息,请参阅 数据库实例类。
-
您可以同时使用单可用区和多可用区部署。
-
您可以使用标准 PostgreSQL 转储和加载函数从数据库预览环境中导出数据库或将数据库导入数据库预览环境。
预览环境中不支持的功能
以下功能在预览环境中不可用:
-
跨区域快照复制
-
跨区域只读副本
在预览环境中创建新数据库实例
使用以下过程在预览环境中创建数据库实例。
在预览环境中创建数据库实例
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
从导航窗格选择 Dashboard (控制面板)。
-
在控制面板页面中,找到控制面板页面上的 Database Preview Environment(数据库预览环境)部分,如下图所示。
您可以直接导航到 Database Preview Environment
(数据库预览环境)。在继续操作之前,您必须确认并接受这些限制。 -
要创建 RDS for PostgreSQL 数据库实例,请遵循与创建任何 Amazon RDS 数据库实例相同的流程。有关更多信息,请参阅创建数据库实例中的控制台过程。
要使用 RDS API 或 AWS CLI 在数据库预览环境中创建实例,请使用以下端点。
rds-preview.us-east-2.amazonaws.com
数据库预览环境中的 PostgreSQL 版本 15
PostgreSQL 版本 15 现可在 Amazon RDS 数据库预览环境中使用。PostgreSQL 版本 15 包含一些改进,如以下 PostgreSQL 文档中所述:
有关数据库预览环境的信息,请参阅使用数据库预览环境。要从控制台中访问预览环境,请选择 https://console.aws.amazon.com/rds-preview/
可用的 PostgreSQL 数据库版本
Amazon RDS 支持运行多种 PostgreSQL 版本的数据库实例。在创建新数据库实例时,您可以指定目前可用的任何 PostgreSQL 版本。您可以指定主要版本(例如 PostgreSQL 14),以及所指定主要版本的任何可用的次要版本。如果没有指定任何版本,Amazon RDS 会默认使用可用的版本,通常是最新的版本。如果指定了主要版本但未指定次要版本,Amazon RDS 将默认使用您指定的主要版本的最新版本。
要查看可用版本的列表以及新建数据库实例的默认值,请使用 describe-db-engine-versions
AWS CLI 命令。例如,要显示默认 PostgreSQL 引擎版本,请使用以下命令:
aws rds describe-db-engine-versions --default-only --engine postgres
有关 Amazon RDS 支持的 PostgreSQL 版本的详细信息,请参阅 Amazon RDS for PostgreSQL 发布说明。
弃用 PostgreSQL 版本 10
2023 年 4 月 17 日,Amazon RDS 计划按照如下安排弃用 PostgreSQL 10。我们建议您采取措施,将在主要版本 10 上运行的 PostgreSQL 数据库升级到更高版本,例如 PostgreSQL 版本 14。要从 10.19 之前的 PostgreSQL 版本升级 RDS for PostgreSQL 主要版本 10 数据库实例,我们建议您先升级到版本 10.19,然后再升级到版本 14。有关更多信息,请参阅升级适用于 Amazon RDS 的 PostgreSQL 数据库引擎。
操作或建议 | 日期 |
---|---|
PostgreSQL 社区计划弃用 PostgreSQL 10,在此日期之后不会提供任何安全补丁。 |
2022 年 11 月 10 日 |
开始将 RDS for PostgreSQL 10 数据库实例升级到更高的主要版本,例如 PostgreSQL 14。虽然可以继续还原 PostgreSQL 10 快照并创建版本 10 的只读副本,但请注意此弃用安排中的其他关键日期及其影响。 |
现在至 2023 年 2 月 14 日 |
在此日期之后,您无法通过 AWS Management Console或 AWS CLI 使用 PostgreSQL 主要版本 10 创建新的 Amazon RDS 实例。 |
2023 年 2 月 14 日 |
在此日期之后,Amazon RDS 会自动将 PostgreSQL 10 实例升级到版本 14。如果还原 PostgreSQL 10 数据库快照,Amazon RDS 会自动将还原的数据库升级到 PostgreSQL 14。 |
2023 年 4 月 17 日 |
有关 RDS for PostgreSQL 版本 10 弃用的更多信息,请参阅 AWS re:Post 中的 [公告]:RDS for PostgreSQL 10 弃用
弃用 PostgreSQL 版本 9.6
2022 年 3 月 31 日,Amazon RDS 计划按照如下安排弃用 PostgreSQL 9.6。此前宣布的日期由 2022 年 1 月 18 日延长至 2022 年 4 月 26 日。您应尽快将 PostgreSQL 9.6 数据库实例升级到 PostgreSQL 12 或更高版本。建议先升级到次要版本 9.6.20 或更高版本,然后直接升级到 PostgreSQL 12,不必升级到中间主要版本。有关更多信息,请参阅升级适用于 Amazon RDS 的 PostgreSQL 数据库引擎。
操作或建议 | 日期 |
---|---|
PostgreSQL 社区停止支持 PostgreSQL 9.6,将不再为此版本提供错误修复或安全补丁。 |
2021 年 11 月 11 日 |
尽快开始将 RDS for PostgreSQL 9.6 数据库实例升级到 PostgreSQL 12 或更高版本。虽然可以继续还原 PostgreSQL 9.6 快照并创建版本 9.6 的只读副本,但请注意此弃用安排中的其他关键日期及其影响。 |
现在到 2022 年 3 月 31 日 |
在此日期之后,您无法通过 AWS Management Console 或者 AWS CLI 使用 PostgreSQL 主要版本 9.6 创建新的 Amazon RDS 实例。 |
2022 年 3 月 31 日 |
在此日期之后,Amazon RDS 会自动将 PostgreSQL 9.6 实例升级到版本 12。如果还原 PostgreSQL 9.6 数据库快照,Amazon RDS 会自动将还原的数据库升级到 PostgreSQL 12。 |
2022 年 4 月 26 日 |
Amazon RDS for PostgreSQL 已弃用的版本
从 2021 年 3 月起,RDS for PostgreSQL 9.5 已遭弃用。有关 RDS for PostgreSQL 9.5 弃用的更多信息,请参阅从 Amazon RDS for PostgreSQL 版本 9.5 升级
若要了解有关 RDS for PostgreSQL 弃用策略的更多信息,请参阅 Amazon RDS 常见问题
支持的 PostgreSQL 扩展版本
RDS for PostgreSQL 支持许多 PostgreSQL 扩展。PostgreSQL 社区有时将这些扩展称为模块。扩展针对 PostgreSQL 引擎提供的功能进行了扩展。您可以在 PostgreSQL 版本的默认数据库参数组中找到 Amazon RDS 支持的扩展列表。您还可使用 psql
通过显示 rds.extensions
参数来查看当前扩展列表,如以下示例中所示。
SHOW rds.extensions;
在 rds.extensions
中使用 psql
参数时,可能不会准确显示在次要版本中添加的参数。
从 RDS for PostgreSQL 13 开始,某些扩展可以由数据库用户(而不是 rds_superuser
)安装。它们称为可信扩展。要了解更多信息,请参阅 PostgreSQL 可信扩展。
某些版本的 RDS for PostgreSQL 支持 rds.allowed_extensions
参数。这个参数允许 rds_superuser
限制可以在 RDS for PostgreSQL 数据库实例中安装的扩展。有关更多信息,请参阅限制 PostgreSQL 扩展的安装。
对于每个可用 RDS For PostgreSQL 版本支持的 PostgreSQL 扩展和版本的列表,请参阅《Amazon RDS for PostgreSQL 版本注释》中的 Amazon RDS 上支持的 PostgreSQL 扩展。
限制 PostgreSQL 扩展的安装
您可以限制在 PostgreSQL 数据库实例上安装哪些扩展。为此,请将 rds.allowed_extensions
参数设置为一串以逗号分隔的扩展名称。然后,只有这些扩展才能安装在 PostgreSQL 数据库实例中。
rds.allowed_extensions
参数的默认字符串为 '*',这意味着可以安装引擎版本可用的任何扩展。更改 rds.allowed_extensions
参数不需要重新启动数据库,因为它是动态参数。
PostgreSQL 数据库实例引擎必须是以下版本之一才能使用 rds.allowed_extensions
参数:
-
PostgreSQL 14.1 或更高次要版本
-
PostgreSQL 13.2 或更高次要版本
-
PostgreSQL 12.6 或更高次要版本
要查看允许哪些扩展安装,请使用以下 psql 命令。
postgres=>
SHOW rds.allowed_extensions;
rds.allowed_extensions ------------------------ *
如果扩展是在其被 rds.allowed_extensions
参数列表排除之前安装的,则该扩展仍可以正常使用,并且诸如 ALTER EXTENSION
和 DROP EXTENSION
之类的命令将继续运行。但是,在扩展被限制后,限制扩展的 CREATE EXTENSION
命令将失败。
使用 CREATE EXTENSION
CASCADE
安装扩展依赖项也受到限制。必须在 rds.allowed_extensions
中指定扩展及其依赖项。如果扩展依赖项安装失败,整个 CREATE EXTENSION
CASCADE
语句将失败。
如果 rds.allowed_extensions
参数中未包含扩展,则尝试安装时将看到如下错误。
ERROR: permission denied to create extension "extension-name
"
HINT: This extension is not specified in "rds.allowed_extensions".
PostgreSQL 可信扩展
安装大部分 PostgreSQL 扩展都需要具备 rds_superuser
权限。PostgreSQL 13 推出了可信扩展,这些扩展减少了授予普通用户 rds_superuser
权限的需求。使用此功能,用户可以安装许多扩展(如果他们具有对当前数据库的 CREATE
权限,而不要求具备 rds_superuser
角色)。有关详细信息,请参阅 PostgreSQL 文档中的 SQL 创建扩展
下面列出了具有对当前数据库的 CREATE
权限,但不需要具备 rds_superuser
角色的用户可以安装的扩展:
-
bool_plperl
-
jsonb_plperl
对于每个可用 RDS For PostgreSQL 版本支持的 PostgreSQL 扩展和版本的列表,请参阅《Amazon RDS for PostgreSQL 版本注释》中的 Amazon RDS 上支持的 PostgreSQL 扩展。
使用 Amazon RDS for PostgreSQL 支持的 PostgreSQL 功能
Amazon RDS for PostgreSQL 支持很多最常见的 PostgreSQL 功能。例如,PostgreSQL 具有对数据库执行例行维护的 autovacuum 功能。原定设置情况下,autovacuum 功能处于活动状态。尽管您可以禁用此功能,但我们强烈建议您继续启用该功能。了解此功能以及您可以做些什么来确保该功能正常工作,如同任何 DBA 基本任务一样。有关 autovacuum 的更多信息,请参阅 在 Amazon RDS for PostgreSQL 上使用 PostgreSQL autovacuum。要了解有关其他常见 DBA 任务的更多信息,请参阅 Amazon RDS for PostgreSQL 的数据库管理员常见任务。
RDS for PostgreSQL 还支持向数据库实例添加重要功能的扩展。例如,您可以使用 PostGIS 扩展处理空间数据,或者使用 pg_cron 扩展从实例内计划维护。有关 PostgreSQL 扩展的更多信息,请参阅 将 PostgreSQL 扩展与 Amazon RDS for PostgreSQL 结合使用。
外部数据包装器是一种特定类型的扩展,旨在让您的 RDS for PostgreSQL 数据库实例与其他商用数据库或数据类型配合使用。有关 RDS for PostgreSQL 支持的外部数据包装器的更多信息,请参阅 使用 Amazon RDS for PostgreSQL 支持的外部数据包装器。
在下文中,您可以了解有关 RDS for PostgreSQL 支持的一些其他功能的信息。
主题
使用 RDS for PostgreSQL 自定义数据类型和枚举
PostgreSQL 支持创建自定义数据类型和使用枚举。有关创建和使用枚举以及其他数据类型的更多信息,请参阅 PostgreSQL 文档中的枚举类型
以下是创建一种类型作为枚举然后在表中插入值的示例。
CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');
CREATE TYPE
CREATE TABLE t1 (colors rainbow);
CREATE TABLE
INSERT INTO t1 VALUES ('red'), ( 'orange');
INSERT 0 2
SELECT * from t1;
colors -------- red orange (2 rows)
postgres=>
ALTER TYPE rainbow RENAME VALUE 'red' TO 'crimson';
ALTER TYPE
postgres=>
SELECT * from t1;
colors --------- crimson orange (2 rows)
适用于 RDS for PostgreSQL 的事件触发条件
PostgreSQL 的所有当前版本都支持事件触发条件,RDS for PostgreSQL 的所有可用版本也支持事件触发条件。可以使用主用户账户(默认:postgres
)创建、修改、重命名和删除事件触发条件。事件触发器位于数据库实例级别,因此,它们可应用于实例上的所有数据库。
例如,以下代码创建在每个数据定义语言 (DDL) 命令结束时打印当前用户的事件触发器。
CREATE OR REPLACE FUNCTION raise_notice_func() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'In trigger function: %', current_user; END; $$; CREATE EVENT TRIGGER event_trigger_1 ON ddl_command_end EXECUTE PROCEDURE raise_notice_func();
有关 PostgreSQL 事件触发器的更多信息,请参阅 PostgreSQL 文档中的事件触发器
在 Amazon RDS 上使用 PostgreSQL 事件触发器存在多个限制。这些功能包括:
-
您不能在只读副本上创建事件触发器。不过,您可以在只读副本源上创建事件触发器。然后,事件触发器复制到只读副本。从源推送更改时,不会触发只读副本上的事件触发器。不过,如果提升只读副本,则当数据库发生操作时将触发现有事件触发器。
-
要将主要版本升级到使用事件触发器的 PostgreSQL 数据库实例,请确保在升级该实例之前删除事件触发器。
适用于 RDS for PostgreSQL 的大页
大页是一项内存管理功能,可以减少数据库实例处理大量连续内存数据块(例如共享缓冲区使用的内存数据块)时的开销。RDS for PostgreSQL 的当前所有可用版本支持 PostgreSQL 的这个功能。您可以通过使用对 mmap
或 SYSV
共享内存的调用,为应用程序分配大页。RDS for PostgreSQL 支持 4 KB 和 2 MB 的页面大小。
您可以通过更改 huge_pages
参数的值来启用或禁用大型页面。默认情况下,微型、小型和中型数据库实例类以外的所有数据库实例类都会启用此功能。
db.m1、db.m2 和 db.m3 数据库实例类不支持大页。
RDS for PostgreSQL 根据可用的共享内存使用大页。如果由于共享内存约束,数据库实例无法使用大页,Amazon RDS 会阻止数据库实例启动。在这种情况下,Amazon RDS 会将数据库实例的状态设置为不兼容参数状态。在这种情况下,您可以将 huge_pages
参数设置为 off
以允许 Amazon RDS 启动数据库实例。
shared_buffers
参数是设置使用大页所需的共享内存池的关键。shared_buffers
参数的原定设置值使用数据库参数宏。此宏设置数据库实例内存可用的总共 8KB 分页的百分比。使用标准大页时,这些页面会位于大页中。如果共享内存参数设置为需要 90% 以上的数据库实例内存,则 Amazon RDS 将数据库实例置于不兼容参数状态。
若要了解有关 PostgreSQL 内存管理的更多信息,请参阅 PostgreSQL 文档中的资源消耗
为 Amazon RDS for PostgreSQL 执行逻辑复制
从版本 10.4 开始,RDS for PostgreSQL 支持 PostgreSQL 10 中引入的发布和订阅 SQL 语法。要了解更多信息,请参阅 PostgreSQL 文档中的逻辑复制
除了 PostgreSQL 10 中引入的原生 PostgreSQL 逻辑复制功能外,RDS for PostgreSQL 还支持 pglogical
扩展。有关更多信息,请参阅使用 pglogical 跨实例同步数据。
在下文中,您可以了解有关为 RDS for PostgreSQL 数据库实例设置逻辑复制的信息。
了解逻辑复制和逻辑解码
RDS for PostgreSQL 支持使用 PostgreSQL 的逻辑复制槽流式传输预写日志 (WAL) 更改。其还支持使用逻辑解码。您可以在实例上设置逻辑复制槽并通过这些槽将数据库更改流式传输到某个客户端(如 pg_recvlogical
)。您可在数据库级别创建逻辑复制槽,它们支持与单个数据库的复制连接。
PostgreSQL 逻辑复制的最常见客户端是 AWS Database Migration Service 或 Amazon EC2 实例上的自定义托管主机。逻辑复制槽没有关于流接收器的信息。此外,不要求目标是副本数据库。如果设置逻辑复制槽并且不从该槽进行读取,则数据可写入并快速填满数据库实例上的存储。
您可启用 Amazon RDS 的 PostgreSQL 逻辑复制和逻辑解码,带有参数、复制连接类型和安全角色。逻辑解码的客户端可以是能够与 PostgreSQL 数据库实例上的数据库建立复制连接的任何客户端。
为 RDS for PostgreSQL 数据库实例启用逻辑解码
-
确保您使用的用户账户具有以下角色:
-
rds_superuser
角色,以使您可以启用逻辑复制 -
rds_replication
角色,以授予管理逻辑槽并使用逻辑槽流式处理数据的权限
-
-
将
rds.logical_replication
静态参数设置为 1。在应用该参数时,还将设置参数wal_level
、max_wal_senders
、max_replication_slots
和max_connections
。这些参数更改可能会增加 WAL 生成,因此,仅在使用逻辑槽时设置rds.logical_replication
参数。 -
重启数据库实例,静态
rds.logical_replication
参数才会生效。 -
请按下一部分中的说明创建逻辑复制槽。该过程需要您指定解码插件。目前,RDS for PostgreSQL 支持 PostgreSQL 随附的 test_decoding 和 wal2json 输出插件。
有关 PostgreSQL 逻辑解码的更多信息,请参阅 PostgreSQL 文档
使用逻辑复制槽
您可以通过 SQL 命令来使用逻辑槽。例如,以下命令使用默认的 PostgreSQL 输出插件 test_slot
创建一个名为 test_decoding
的逻辑槽。
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');
slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)
要列出逻辑槽,请使用以下命令。
SELECT * FROM pg_replication_slots;
要删除逻辑槽,请使用以下命令。
SELECT pg_drop_replication_slot('test_slot');
pg_drop_replication_slot ----------------------- (1 row)
有关使用逻辑复制槽的更多示例,请参阅 PostgreSQL 文档中的逻辑解码示例
创建逻辑复制槽后,就可以开始流式处理。以下示例显示了如何通过流式复制协议控制逻辑解码。此示例使用 PostgreSQL 发行版中包含的程序 pg_recvlogical。此操作要求设置客户端身份验证以允许复制连接。
pg_recvlogical -d postgres --slot test_slot -U postgres --host -
instance-name.111122223333
.aws-region
.rds.amazonaws.com -f - --start
要查看 pg_replication_origin_status
视图的内容,请查询 pg_show_replication_origin_status
函数。
SELECT * FROM pg_show_replication_origin_status();
local_id | external_id | remote_lsn | local_lsn ----------+-------------+------------+----------- (0 rows)
stats_temp_directory 的 RAM 磁盘
您可使用 RDS for PostgreSQL 参数 rds.pg_stat_ramdisk_size
指定分配给用于存储 PostgreSQL stats_temp_directory
的 RAM 磁盘系统内存。RAM 磁盘参数适用于 Amazon RDS 上的所有 PostgreSQL 版本。
在某些工作负载下,设置该参数可提高性能并降低 I/O 要求。有关 stats_temp_directory
的更多信息,请参阅 PostgreSQL 文档
要为您的 stats_temp_directory
设置 RAM 磁盘,可在数据库实例使用的参数组中将 rds.pg_stat_ramdisk_size
参数设置为整数值。此参数表示 MB,因此必须使用整数值。表达式、公式和函数对 rds.pg_stat_ramdisk_size
参数无效。请务必重启数据库实例,以便更改能够生效。有关设置参数的信息,请参阅 使用参数组。
例如,以下 AWS CLI 命令将 RAM 磁盘参数设置为 256 MB。
aws rds modify-db-parameter-group \ --db-parameter-group-name pg-95-ramdisk-testing \ --parameters "ParameterName=rds.pg_stat_ramdisk_size, ParameterValue=256, ApplyMethod=pending-reboot"
在重启后,请运行以下命令查看 stats_temp_directory
的状态。
postgres=>
SHOW stats_temp_directory;
该命令应返回以下内容。
stats_temp_directory
---------------------------
/rdsdbramdisk/pg_stat_tmp
(1 row)
适用于 RDS for PostgreSQL 的表空间
为了实现兼容性,RDS for PostgreSQL 支持表空间。由于所有存储都在单个逻辑卷上,因此不能使用表空间进行 I/O 拆分或隔离。我们的基准测试和经验表明,对于大多数使用案例,单个逻辑卷是最佳设置。
若要为 RDS for PostgreSQL 数据库实例创建和使用表空间,需要 rds_superuser
角色。RDS for PostgreSQL 数据库实例的主用户账户(默认名称:postgres
)是此角色的成员。有关更多信息,请参阅了解 PostgreSQL 角色和权限。
如果在创建表空间时指定文件名,则路径前缀为 /rdsdbdata/db/base/tablespace
。以下示例将表空间文件放在 /rdsdbdata/db/base/tablespace/data
中。此示例假定 dbadmin
用户(角色)存在且已授予其使用表空间所需的 rds_superuser
角色。
postgres=>
CREATE TABLESPACE act_data OWNER dbadmin LOCATION '/data';
CREATE TABLESPACE
若要了解有关 PostgreSQL 表空间的更多信息,请参阅 PostgreSQL 文档中的表空间
用于 EBCDIC 和其他大型机迁移的 RDS for PostgreSQL 排序规则
RDS for PostgreSQL 版本 10 及更高版本包括 ICU 版本 60.2,该版本基于 Unicode 10.0,并包括来自 Unicode 通用区域设置数据存储库 CLDR 32 的排序规则。这些软件国际化库确保字符编码以一致的方式呈现,无论操作系统或平台如何。有关 Unicode CLDR-32 的更多信息,请参阅 Unicode CLDR 网站上的 CLDR 32 版本注释
从版本 14.3 开始,RDS for PostgreSQL 还包括排序规则,这些排序规则有助于从基于 EBCDIC 的系统进行数据集成和转换。扩展二进制编码的十进制交换码或 EBCDIC 编码通常由大型机操作系统使用。这些 Amazon RDS 提供的排序规则的定义非常狭窄,仅对那些直接映射到 EBCDIC 代码页的 Unicode 字符进行排序。字符按 EBCDIC 代码点顺序排序,以便在转换后进行数据验证。这些排序规则不包括非规范化表单,也不包含不直接映射到源 EBCDIC 代码页上字符的 Unicode 字符。
EBCDIC 代码页和 Unicode 代码点之间的字符映射基于 IBM 发布的表。可以从 IBM 下载整套的压缩文件
Unicode to EBCDIC collations table – 一些大型机数据迁移工具在内部使用 LATIN1 或 LATIN9 来编码和处理数据。此类工具使用往返方案来保持数据完整性并支持反向转换。使用 LATIN1 编码处理数据(这种编码不需要特殊处理)的工具可以使用此表中的排序规则。
Unicode to LATIN9 collations table – 您可以在任何 RDS for PostgreSQL 数据库中使用这些排序规则。
在下表中,您可以找到 RDS for PostgreSQL 中可用的排序规则,这些排序规则将 EBCDIC 代码页映射到 Unicode 代码点。我们建议您将此表中的排序规则用于需要根据 IBM 代码页的顺序进行排序的应用程序开发。
PostgreSQL 排序规则名称 | 代码页映射和排序顺序的描述 |
---|---|
da-DK-cp277-x-icu | 直接映射到 IBM EBCDIC 代码页 277(每个转换表)的 Unicode 字符按 IBM CP 277 代码点顺序排序 |
de-DE-cp273-x-icu | 直接映射到 IBM EBCDIC 代码页 273(每个转换表)的 Unicode 字符按 IBM CP 273 代码点顺序排序 |
en-GB-cp285-x-icu | 直接映射到 IBM EBCDIC 代码页 285(每个转换表)的 Unicode 字符按 IBM CP 285 代码点顺序排序 |
en-US-cp037-x-icu | 直接映射到 IBM EBCDIC 代码页 037(每个转换表)的 Unicode 字符按 IBM CP 37 代码点顺序排序 |
es-ES-cp284-x-icu | 直接映射到 IBM EBCDIC 代码页 284(每个转换表)的 Unicode 字符按 IBM CP 284 代码点顺序排序 |
fi-FI-cp278-x-icu | 直接映射到 IBM EBCDIC 代码页 278(每个转换表)的 Unicode 字符按 IBM CP 278 代码点顺序排序 |
fr-FR-cp297-x-icu | 直接映射到 IBM EBCDIC 代码页 297(每个转换表)的 Unicode 字符按 IBM CP 297 代码点顺序排序 |
it-IT-cp280-x-icu | 直接映射到 IBM EBCDIC 代码页 280(每个转换表)的 Unicode 字符按 IBM CP 280 代码点顺序排序 |
nl-BE-cp500-x-icu | 直接映射到 IBM EBCDIC 代码页 500(每个转换表)的 Unicode 字符按 IBM CP 500 代码点顺序排序 |
Amazon RDS 提供了一组额外的排序规则,这些排序规则使用 IBM 发布的表,按源数据的 EBCDIC 代码页的原始代码点顺序,对映射到 LATIN9 字符的 Unicode 代码点进行排序。
PostgreSQL 排序规则名称 | 代码页映射和排序顺序的描述 |
---|---|
da-DK-cp1142m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1142(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1142 代码点顺序排序 |
de-DE-cp1141m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1141(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1141 代码点顺序排序 |
en-GB-cp1146m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1146(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1146 代码点顺序排序 |
en-US-cp1140m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1140(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1140 代码点顺序排序 |
es-ES-cp1145m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1145(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1145 代码点顺序排序 |
fi-FI-cp1143m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1143(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1143 代码点顺序排序 |
fr-FR-cp1147m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1147(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1147 代码点顺序排序 |
it-IT-cp1144m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1144(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1144 代码点顺序排序 |
nl-BE-cp1148m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1148(每个转换表)转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1148 代码点顺序排序 |
在下文中,您可以找到使用 RDS for PostgreSQL 排序规则的示例。
db1=>
SELECT pg_import_system_collations('pg_catalog');pg_import_system_collations ----------------------------- 36
db1=>
SELECT '¤' < 'a' col1;col1 ------ t
db1=>
SELECT '¤' < 'a' COLLATE "da-DK-cp277-x-icu" col1;col1 ------ f
我们建议您将 Unicode to EBCDIC collations table和 Unicode to LATIN9 collations table中的排序规则用于需要根据 IBM 代码页的顺序进行排序的应用程序开发。以下排序规则(后缀为字母“b”)在 pg_collation
中也可见,但供 AWS 中的大型机数据集成和迁移工具使用,这些工具将代码页映射到特定的代码点偏移,并要求在排序规则中进行特殊处理。换句话说,不建议使用以下排序规则。
da-DK-277b-x-icu
da-DK-1142b-x-icu
de-DE-cp273b-x-icu
de-DE-cp1141b-x-icu
en-GB-cp1146b-x-icu
en-GB-cp285b-x-icu
en-US-cp037b-x-icu
en-US-cp1140b-x-icu
es-ES-cp1145b-x-icu
es-ES-cp284b-x-icu
fi-FI-cp1143b-x-icu
fr-FR-cp1147b-x-icu
fr-FR-cp297b-x-icu
it-IT-cp1144b-x-icu
it-IT-cp280b-x-icu
nl-BE-cp1148b-x-icu
nl-BE-cp500b-x-icu
要了解有关将应用程序从大型机环境迁移到 AWS 的更多信息,请参阅什么是 AWS Mainframe Modernization?
有关在 PostgreSQL 中管理排序规则的更多信息,请参阅 PostgreSQL 文档中的排序规则支持