Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon RDS 上的 PostgreSQL

Amazon RDS 支持运行多种 PostgreSQL 版本的数据库实例。可创建数据库实例和数据库快照、时间点还原和备份。运行 PostgreSQL 的数据库实例支持多可用区部署、只读副本 (版本 9.3.5 及更高版本) 、预配置 IOPS,可以在 VPC 内创建此类数据库实例。还可使用 SSL 连接到运行 PostgreSQL 的数据库实例。

在创建数据库实例之前,您应完成本指南的Amazon RDS 设置部分中的步骤。

您可以使用任何标准 SQL 客户端应用程序从客户端计算机对实例运行命令。这类应用程序包括 pgAdmin (一个用于 PostgreSQL 的热门开源管理和开发工具) 或 psql (PostgreSQL 安装包含的命令行实用工具)。为了让用户获得托管式服务体验,Amazon RDS 未提供对数据库实例的主机访问权限,并且限制对需要高级特权的某些系统程序和表的访问权限。Amazon RDS 支持使用任何标准 SQL 客户端应用程序 (如 Oracle SQL Developer) 访问数据库实例上的数据库。Amazon RDS 不允许主机通过 Telnet 或安全外壳 (SSH) 直接访问数据库实例。

Amazon RDS for PostgreSQL 符合许多行业标准。例如,您可以使用 Amazon RDS for PostgreSQL 数据库构建符合 HIPAA 标准的应用程序,并存储医疗保健相关信息,包括在实施的与 AWS 签订的商业伙伴协议 (BAA) 下保护的健康信息 (PHI)。Amazon RDS for PostgreSQL 还满足联邦风险与授权管理项目 (FedRAMP) 安全要求,在 AWS GovCloud(美国) 区域中,获得了 FedRAMP 联合授权委员会 (JAB) 的 FedRAMP 高基准临时授权操作 (P-ATO)。有关支持的合规性标准的更多信息,请参阅 AWS 云合规性

要将 PostgreSQL 数据导入到数据库实例中,请按将数据导入 Amazon RDS 上的 PostgreSQL;一节中的信息操作。

Amazon RDS 上 PostgreSQL 的常见管理任务

下面是您对 Amazon RDS PostgreSQL 数据库实例执行的常见管理任务,以及有关每个任务的相关文档的链接。

任务区域 相关文档

设置 Amazon RDS 供首次使用

在创建数据库实例之前,必须先满足一些先决条件。例如,默认情况下,数据库实例在创建后带有一个阻止对其进行访问的防火墙。因此,您必须使用正确的 IP 地址和网络配置创建安全组来访问数据库实例。

Amazon RDS 设置

了解 Amazon RDS 数据库实例

如果您出于生产目的而创建数据库实例,则应该了解 Amazon RDS 中的实例类、存储类型和预配置 IOPS 的工作原理。

数据库实例类

Amazon RDS 存储类型

用于提高性能的 Amazon RDS 预配置 IOPS 存储

查找支持的 PostgreSQL 版本

Amazon RDS 支持 PostgreSQL 的多个版本。

支持的 PostgreSQL 数据库版本

设置高可用性和故障转移支持

生产数据库实例应使用多可用区部署。多可用区部署为数据库实例提供了更高的可用性、数据持久性和容错能力。

高可用性 (多可用区)

了解 Amazon Virtual Private Cloud (VPC) 网络

如果您的 AWS 账户具有默认 VPC,则自动在默认 VPC 中创建数据库实例。如果您的账户没有默认 VPC,并且您希望数据库实例位于 VPC 中,则必须在创建数据库实例之前创建 VPC 和子网组。

确定您使用的是 EC2-VPC 还是 EC2-Classic 平台

在 VPC 中使用 Amazon RDS 数据库实例

将数据导入 Amazon RDS PostgreSQL

您可以使用多种不同的工具将数据导入 Amazon RDS 中的 PostgreSQL 数据库实例。

将数据导入 Amazon RDS 上的 PostgreSQL;

设置只读副本 (主/备用)

Amazon RDS 上的 PostgreSQL 支持来自主实例的同一区域和不同区域的只读副本。

使用 PostgreSQL、MySQL 和 MariaDB 只读副本

PostgreSQL 只读副本 (版本 9.3.5 和更高版本)

跨区域复制只读副本

了解安全组

默认情况下,数据库实例在创建时带有一个防火墙,这个防火墙会阻止对实例进行访问。因此,您必须使用正确的 IP 地址和网络配置创建安全组来访问数据库实例。

一般而言,如果数据库实例位于 EC2-Classic 平台上,则需要创建数据库安全组;如果数据库实例位于 EC2-VPC 平台上,则需要创建 VPC 安全组。

确定您使用的是 EC2-VPC 还是 EC2-Classic 平台

Amazon RDS 个安全组

设置参数组和功能

如果数据库实例需要特定数据库参数,则应在创建数据库实例前创建参数组。

使用数据库参数组

执行 PostgreSQL 的常见 DBA 任务

如果数据库实例需要特定数据库选项,则应在创建数据库实例前创建选项组。

附录:PostgreSQL 的数据库管理员常见任务

连接到您的 PostgreSQL 数据库实例

在创建安全组并将其与数据库实例关联后,您可以使用任何标准 SQL 客户端应用程序 (如 pgadmin III) 连接到数据库实例。

连接到运行 PostgreSQL 数据库引擎的数据库实例

对 PostgreSQL 数据库实例使用 SSL

备份和还原数据库实例

您可以配置数据库实例以采用自动备份或采用手动快照,然后从备份或快照还原实例。

备份和还原 Amazon RDS 数据库实例

监控数据库实例的活动和性能

可使用 CloudWatch Amazon RDS 指标、事件和增强监控来监控 PostgreSQL 数据库实例。

查看数据库实例指标

查看 Amazon RDS 事件

升级 PostgreSQL 数据库版本

您可以对 PostgreSQL 数据库实例同时执行主要和次要版本升级。

升级 PostgreSQL 数据库实例

主要版本升级

使用日志文件

您可以访问 PostgreSQL 数据库实例的日志文件。

PostgreSQL 数据库日志文件

了解 PostgreSQL 数据库实例的最佳实践

查找在 Amazon RDS 上使用 PostgreSQL 的一些最佳实践。

使用 PostgreSQL 的最佳实践

Amazon RDS PostgreSQL 规划信息

Amazon RDS 支持运行多种 PostgreSQL 版本的数据库实例。本部分介绍如何在 Amazon RDS 上使用 PostgreSQL。您还应注意 PostgreSQL 数据库实例的限制。

想要了解有关将 PostgreSQL 数据导入到数据库实例的信息,请参阅 将数据导入 Amazon RDS 上的 PostgreSQL;

使用 rds_superuser 角色

创建数据库实例时,将您创建的主用户系统账户分配给 rds_superuser 角色。rds_superuser 角色类似于 PostgreSQL 超级用户角色 (在本地实例中习惯上称为 postgre),但有一些限制。与 PostgreSQL 超级用户角色相同,rds_superuser 角色具有对数据库实例的大多数权限,并且除非用户需要最大限度地访问数据库实例,否则不应将此角色分配给用户。

rds_superuser 角色可以执行以下操作:

  • 添加可用于 Amazon RDS 的扩展。有关更多信息,请参阅支持的 PostgreSQL 功能PostgreSQL 文档

  • 管理表空间,包括创建和删除它们。有关更多信息,请参阅 PostgreSQL 文档中的此部分。

  • 使用 pg_stat_activity 命令查看所有未分配 rds_superuser 角色的用户并使用 pg_terminate_backendpg_cancel_backend 命令断开其连接。

  • 向所有非 rds_superuser 角色授予和撤消复制属性. 有关更多信息,请参阅 PostgreSQL 文档中的此部分。

支持的 PostgreSQL 数据库版本

Amazon RDS 支持以下 PostgreSQL 版本:

Amazon RDS 上的 PostgreSQL 版本 9.6.3

PostgreSQL 版本 9.6.3 包含几项新功能和错误修复。此版本包括以下功能:

  • 支持扩展 pg_repack 版本 1.4.0。您可以使用此扩展从表和索引中移除多余内容。有关将 pg_repack 与 Amazon RDS 结合使用的更多信息,请参阅使用 pg_repack 扩展

  • 支持扩展 pgaudit 版本 1.1.0。此扩展提供详细的会话和对象审核日志记录。有关将 pgaudit 与 Amazon RDS 结合使用的更多信息,请参阅使用 pgaudit 扩展

  • 支持 wal2json,它是一个用于逻辑解码的输出插件。

  • 支持 auto_explain 模块。您可以使用此模块自动记录慢速语句的执行计划。以下示例显示如何从 Amazon RDS PostgreSQL 会话中使用 auto_explain

    LOAD '$libdir/plugins/auto_explain';

    有关使用 auto_explain 的更多信息,请参阅 PostgreSQL 文档

Amazon RDS 上的 PostgreSQL 版本 9.6.2

PostgreSQL 版本 9.6.2 包含几项新功能和错误修复。新版本还包含以下扩展版本:

  • PostGIS 版本 2.3.2

  • pg_freespacemap 版本 1.1 – 提供一种检查空闲空间映射表 (FSM) 的方式。此扩展提供一个名为 pg_freespace 的重载函数。此函数显示指定页面或关系中的所有页面在空闲空间映射表中记录的值。

  • pg_hint_plan 版本 1.1.3 – 在 SQL 语句的开头使用提示性短语控制执行计划。

  • log_fdw 版本 1.0 – 通过使用 Amazon RDS 的这一扩展,您可在数据库内加载并查询您的数据库引擎日志。有关更多信息,请参阅 使用 log_fdw 扩展

  • 现在,您可以通过此版本发布在数据库参数组中编辑 max_worker_processes 参数。

Amazon RDS 上的 PostgreSQL 版本 9.6.2 还支持更改枚举值。有关更多信息,请参阅 适用于 PostgreSQL 的 ALTER ENUM

有关 9.6.2 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

Amazon RDS 上的 PostgreSQL 版本 9.6.1

PostgreSQL 版本 9.6.1 包含几项新功能和改进。有关 PostgreSQL 9.6.1 中的修复和改进的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例。有关使用 Amazon RDS for PostgreSQL 9.6.1 执行并行查询和阶段搜索的信息,请参阅 AWS 数据库博客

PostgreSQL 版本 9.6.1 包括以下更改:

  • 并行查询执行:支持并行执行大型的只读查询,允许并行运行顺序扫描、哈希联接、嵌套循环和聚合。默认情况下,不启用并行查询执行。要允许执行并行查询,请将 max_parallel_workers_per_gather 参数设置为大于零的值。

  • 更新了 postgres_fdw 扩展:支持远程 JOIN、SORT、UPDATE 和 DELETE 操作。

  • PL/v8 更新:提供 PL/v8 语言的版本 1.5.3。

  • PostGIS 版本更新:支持 POSTGIS="2.3.0 r15146" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.2, 08 September 2015" GDAL="GDAL 2.1.1, released 2016/07/07" LIBXML="2.9.1" LIBJSON="0.12" RASTER

  • Vacuum 改进:避免在 vacuum 冻结操作期间不必要地扫描页面。

  • 全文搜索支持短语:支持在 tsquery 输入中使用新运算符 <-> 和 <N> 指定短语搜索查询。

  • 支持两个新扩展

    • bloom,一个基于 Bloom 筛选器的索引访问方法

    • pg_visibility,提供一种用于检查表的可见性图和页面级可见性信息的方法。

  • 利用 9.6.2 版本发布,现在您可以在 PostgreSQL 版本 9.6.1 数据库参数组中编辑 max_worker_processes 参数。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 创建新的 PostgreSQL 9.6.1 数据库实例。也可以使用主版本升级,将现有的 PostgreSQL 9.5 实例升级到版本 9.6.1。如果您想将版本 9.3 或 9.4 的数据库实例升级到版本 9.6,您必须先执行点击式升级,升级到下一个主要版本。每次升级操作都会使您的数据库实例在一小段时间内不可用。

Amazon RDS 上的 PostgreSQL 版本 9.5.7

PostgreSQL 版本 9.5.7 包含几项新功能和错误修复。此版本包括以下功能:

  • 支持扩展 pgaudit 版本 1.0.5。此扩展提供详细的会话和对象审核日志记录。有关将 pgaudit 与 Amazon RDS 结合使用的更多信息,请参阅使用 pgaudit 扩展

  • 支持 wal2json,它是一个用于逻辑解码的输出插件。

  • 支持 auto_explain 模块。您可以使用此模块自动记录慢速语句的执行计划。以下示例显示如何从 Amazon RDS PostgreSQL 会话中使用 auto_explain

    LOAD '$libdir/plugins/auto_explain';

    有关使用 auto_explain 的更多信息,请参阅 PostgreSQL 文档

Amazon RDS 上的 PostgreSQL 版本 9.5.6

PostgreSQL 版本 9.5.6 包含几项新功能和错误修复。新版本还包含以下扩展版本:

  • PostGIS 版本 2.2.5

  • pg_freespacemap 版本 1.1 – 提供一种检查空闲空间映射表 (FSM) 的方式。此扩展提供一个名为 pg_freespace 的重载函数。此函数显示指定给定页面或关系中的所有页面在空闲空间映射表中记录的值。

  • pg_hint_plan 版本 1.1.3 – 在 SQL 语句的开头使用提示性短语控制执行计划。

Amazon RDS 上的 PostgreSQL 版本 9.5.6 还支持更改枚举值。有关更多信息,请参阅 适用于 PostgreSQL 的 ALTER ENUM

有关 9.5.6 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

Amazon RDS 上的 PostgreSQL 版本 9.5.4

PostgreSQL 9.5.4 版包含若干对早期版本中发现的问题的修复。有关 9.5.4 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

从 PostgreSQL 版本 9.4 开始,PostgreSQL 支持使用逻辑复制解码来流式处理 WAL 更改。Amazon RDS 支持 PostgreSQL 版本 9.4.9 及更高版本,和 9.5.4 及更高版本的逻辑复制。有关 Amazon RDS 上的 PostgreSQL 逻辑复制的更多信息,请参阅 Amazon RDS 上 PostgreSQL 的逻辑复制

从 Amazon RDS 的 PostgreSQL 版本 9.5.4 开始,支持使用 ALTER USER WITH BYPASSRLS 命令。

PostgreSQL 版本 9.4.9 及更高版本、版本 9.5.4 及更高版本支持事件触发器,并且 Amazon RDS 支持这些版本的事件触发器。可使用主用户账户创建、修改、重命名和删除事件触发器。事件触发器位于数据库实例级别,因此它们可应用于实例上的所有数据库。有关 Amazon RDS 上的 PostgreSQL 事件触发器的更多信息,请参阅 Amazon RDS 上 PostgreSQL 的事件触发器

Amazon RDS 上的 PostgreSQL 版本 9.5.2

PostgreSQL 9.5.2 版包含若干对早期版本中发现的问题的修复。有关 9.5.2 中功能的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

PostgreSQL 9.5.2 版不支持上一代 db.t1、db.m1 或 db.m2 实例类。如果您需要将运行 PostgreSQL 9.4 版的数据库实例升级到 9.5.2 版以使用其中一个实例类,则需要对计算进行缩放。为此,您需要类似的当前一代 db.t2 或 db.m3 实例类,然后才能将运行 PostgreSQL 9.4 版的数据库实例升级到 9.5.2 版。有关数据库实例类的更多信息,请参阅数据库实例类

本机 PostgreSQL 版本 9.5.2 引入了命令 ALTER USER WITH BYPASSRLS。

此版本包含以前的版本中的更新,包括:

  • CVE-2016-2193:修复了多个 ROLE 在同一会话中可能重复使用查询计划的问题。重复使用查询计划可能导致查询使用一组错误的行级别安全性 (RLS) 策略。

  • CVE-2016-3065:修复了通过对 BRIN 索引页使用 pageinspect 触发的服务器崩溃错误。由于攻击者或许能够公开一部分服务器内存,此崩溃被视为安全问题。

RDS PostgreSQL 9.5 中的主要增强如下:

  • UPSERT:允许 INSERT 以生成将变为 UPDATE 或忽略的约束冲突

  • 增加 GROUP BY 分析功能 GROUPING SETS、CUBE 和 ROLLUP

  • 增加行级别安全性控制

  • 创建跟踪复制进度的机制,包括在逻辑复制期间识别单个更改源的方法

  • 增加数据块范围索引 (BRIN)

  • 增加大量排序性能改进

  • 增加大量针对 CPU 计算机的性能改进

  • PostGIS 2.2.2 - 要使用此最新版本的 PostGIS,请升级到版本 9.5.2 后使用 ALTER EXTENSION UPDATE 语句进行更新。示例:

    ALTER EXTENSION POSTGIS UPDATE TO '2.2.2'

  • 通过允许 rds_superuser 账户查看 pg_stat_activity 中的 autovacuum 活动提高了对 autovacuum 会话的可见性。例如,您可识别并终止阻止命令运行或执行慢于手动发出的真空命令的 autovacuum 会话。

RDS PostgreSQL 9.5.2 版包含下列新扩展:

  • address_standardizer – 一行地址分析程序,其采用输入地址并根据存储在表、帮助程序 lex 和 gaz 表中的一组规则规范化地址。

  • hstore_plperl – 为 PL/Perl 提供 hstore 类型的转换。

  • tsm_system_rows – 提供表采样方法 SYSTEM_ROWS,此方法可在 SELECT 命令的 TABLESAMPLE 子句中使用。

  • tsm_system_time – 提供表采样方法 SYSTEM_TIME,此方法可在 SELECT 命令的 TABLESAMPLE 子句中使用。

Amazon RDS 上的 PostgreSQL 版本 9.4.12

PostgreSQL 9.4.12 版包含若干对早期版本中发现的问题的修复。

有关 9.4.12 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

Amazon RDS 上的 PostgreSQL 版本 9.4.11

PostgreSQL 9.4.11 版包含若干对早期版本中发现的问题的修复。

有关 9.4.11 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

从 PostgreSQL 版本 9.4 开始,PostgreSQL 支持使用逻辑复制解码来流式处理 WAL 更改。Amazon RDS 支持 PostgreSQL 版本 9.4.9 及更高版本和 9.5.4 及更高版本的逻辑复制。有关 Amazon RDS 上的 PostgreSQL 逻辑复制的更多信息,请参阅 Amazon RDS 上 PostgreSQL 的逻辑复制

PostgreSQL 版本 9.4.9 及更高版本和版本 9.5.4 及更高版本支持事件触发器,并且 Amazon RDS 支持这些版本的事件触发器。主用户账户可用于创建、修改、重命名和删除事件触发器。事件触发器位于数据库实例级别,因此它们可应用于实例上的所有数据库。有关 Amazon RDS 上的 PostgreSQL 事件触发器的更多信息,请参阅 Amazon RDS 上 PostgreSQL 的事件触发器

Amazon RDS 上的 PostgreSQL 版本 9.4.9

PostgreSQL 9.4.9 版包含若干对早期版本中发现的问题的修复。有关 9.4.9 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

从 PostgreSQL 版本 9.4 开始,PostgreSQL 支持使用逻辑复制解码来流式处理 WAL 更改。Amazon RDS 支持 PostgreSQL 版本 9.4.9 及更高版本,和 9.5.4 及更高版本的逻辑复制。有关 Amazon RDS 上的 PostgreSQL 逻辑复制的更多信息,请参阅 Amazon RDS 上 PostgreSQL 的逻辑复制

PostgreSQL 版本 9.4.9 及更高版本、版本 9.5.4 及更高版本支持事件触发器,并且 Amazon RDS 支持这些版本的事件触发器。主用户账户可用于创建、修改、重命名和删除事件触发器。事件触发器位于数据库实例级别,因此它们可应用于实例上的所有数据库。有关 Amazon RDS 上的 PostgreSQL 事件触发器的更多信息,请参阅 Amazon RDS 上 PostgreSQL 的事件触发器

Amazon RDS 上的 PostgreSQL 版本 9.4.7

PostgreSQL 9.4.7 版包含若干对早期版本中发现的问题的修复。有关 9.4.7 中的修复的更多信息,请参阅 PostgreSQL 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

PostgreSQL 9.4.7 版通过允许 rds_superuser 账户查看 pg_stat_activity 中的自动真空活动提高了对自动真空会话的可见性。例如,您可识别并终止阻止命令运行或执行慢于手动发出的真空命令的 autovacuum 会话。

Amazon RDS 上的 PostgreSQL 版本 9.3.17

PostgreSQL 9.3.17 版包含若干对早期版本中发现的错误的修复。此版本包含与版本 9.3.16 相同的扩展组件。有关版本 9.3.17 中的修复列表,请参阅 PostgreSQl 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

Amazon RDS 上的 PostgreSQL 版本 9.3.16

PostgreSQL 9.3.16 版包含若干对早期版本中发现的错误的修复。此版本包含与版本 9.3.14 相同的扩展组件。有关版本 9.3.16 中的修复列表,请参阅 PostgreSQl 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

Amazon RDS 上的 PostgreSQL 版本 9.3.14

PostgreSQL 9.3.14 版包含若干对早期版本中发现的错误的修复。有关 9.3.14 版中修复的列表,请参阅 PostgreSQl 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

Amazon RDS 上的 PostgreSQL 版本 9.3.12

PostgreSQL 9.3.12 版包含若干对早期版本中发现的错误的修复。有关 9.3.12 版中修复的列表,请参阅 PostgreSQl 文档。有关为 PostgreSQL 数据库实例升级引擎版本的信息,请参阅升级 PostgreSQL 数据库实例

PostgreSQL 9.3.12 版通过允许 rds_superuser 账户查看 pg_stat_activity 中的 autovacuum 活动提高了对 autovacuum 会话的可见性。例如,您可识别并终止阻止命令运行或执行慢于手动发出的真空命令的 autovacuum 会话。

支持的 PostgreSQL 功能和扩展

Amazon RDS 支持许多最常见的 PostgreSQL 扩展和功能。

Amazon RDS 上支持的 PostgreSQL 扩展

PostgreSQL 支持许多 PostgreSQL 扩展。以下部分说明了 Amazon RDS 针对主要 PostgreSQL 版本支持的扩展。

您还可以在 PostgreSQL 版本的默认数据库参数组中找到一组 Amazon RDS 支持的扩展。您还可使用 psql 通过显示 rds.extensions 参数来查看当前扩展列表,如以下示例所示:

注意

psql 中使用 rds.extensions 参数时,在次要版本中添加的参数可能不会准确显示。

SHOW rds.extensions;
Amazon RDS 支持的 PostgreSQL 版本 9.3.x 扩展

下表所示为 Amazon RDS 上的 PostgreSQL 目前支持的 PostgreSQL 版本 9.3.x 的 PostgreSQL 扩展。“N/A”表示该扩展不适用于该 PostgreSQL 版本。有关 PostgreSQL 扩展的详细信息,请参阅将相关对象打包为扩展

扩展 9.3.12 9.3.14 9.3.16
address_standardizer 不适用 不适用 不适用
address_standardizer_data_us 不适用 不适用 不适用
绽放 不适用 不适用 不适用
btree_gin 1.0 1.0 1.0
btree_gist 1.0 1.0 1.0
chkpass 1.0 1.0 1.0
citext 1.0 1.0 1.0
cube 1.0 1.0 1.0
dblink 1.1 1.1 1.1
dict_int 1.0 1.0 1.0
dict_xsyn 1.0 1.0 1.0
earthdistance 1.0 1.0 1.0
fuzzystrmatch 1.0 1.0 1.0
hstore 1.2 1.2 1.2
hstore_plperl 不适用 不适用 不适用
intagg 1.0 1.0 1.0
intarray 1.0 1.0 1.0
ip4r 不适用 不适用 不适用
isn 1.0 1.0 1.0
log_fdw - 请参阅 使用 log_fdw 扩展 不适用 不适用 不适用
ltree 1.0 1.0 1.0
pg_buffercache 不适用 不适用 不适用
pg_freespacemap 不适用 不适用 不适用
pg_hint_plan 不适用 不适用 不适用
pg_prewarm 不适用 不适用 不适用
pg_stat_statements 1.1 1.1 1.1
pg_trgm 1.1 1.1 1.1
pg_visibility 不适用 不适用 不适用
pgcrypto 1.0 1.0 1.0
pgrowlocks 1.1 1.1 1.1
pgstattuple 不适用 不适用 不适用
plcoffee 1.4.4 1.4.4 1.4.4
plls 1.4.4 1.4.4 1.4.4
plperl 1.0 1.0 1.0
plpgsql 1.0 1.0 1.0
pltcl 1.0 1.0 1.0
plv8 1.4.4 1.4.4 1.4.4
PostGIS 2.1.8 2.1.8 2.1.8
postgis_tiger_geocoder 2.1.8 2.1.8 2.1.8
postgis_topology 2.1.8 2.1.8 2.1.8
postgres_fdw 1.0 1.0 1.0
sslinfo 1.0 1.0 1.0
tablefunc 1.0 1.0 1.0
test_parser 1.0 1.0 1.0
tsearch2 1.0 1.0 1.0
tsm_system_rows 不适用 不适用 不适用
tsm_system_time 不适用 不适用 不适用
unaccent 1.0 1.0 1.0
uuid-ossp 1.0 1.0 1.0
Amazon RDS 支持的 PostgreSQL 版本 9.4.x 扩展

下表所示为 Amazon RDS 上的 PostgreSQL 目前支持的 PostgreSQL 版本 9.4.x 的 PostgreSQL 扩展。“N/A”表示该扩展不适用于该 PostgreSQL 版本。有关 PostgreSQL 扩展的详细信息,请参阅将相关对象打包为扩展

扩展 9.4.7 9.4.9 9.4.11
address_standardizer 不适用 不适用 不适用
address_standardizer_data_us 不适用 不适用 不适用
绽放 不适用 不适用 不适用
btree_gin 1.0 1.0 1.0
btree_gist 1.0 1.0 1.0
chkpass 1.0 1.0 1.0
citext 1.0 1.0 1.0
cube 1.0 1.0 1.0
dblink 1.1 1.1 1.1
dict_int 1.0 1.0 1.0
dict_xsyn 1.0 1.0 1.0
earthdistance 1.0 1.0 1.0
fuzzystrmatch 1.0 1.0 1.0
hstore 1.3 1.3 1.3
hstore_plperl 不适用 不适用 不适用
intagg 1.0 1.0 1.0
intarray 1.0 1.0 1.0
ip4r 2.0 2.0 2.0
isn 1.0 1.0 1.0
log_fdw - 请参阅 使用 log_fdw 扩展 不适用 不适用 不适用
ltree 1.0 1.0 1.0
pg_buffercache 1.0 1.0 1.0
pg_freespacemap 不适用 不适用 不适用
pg_hint_plan 不适用 不适用 不适用
pg_prewarm 1.0 1.0 1.0
pg_stat_statements 1.2 1.2 1.2
pg_trgm 1.1 1.1 1.1
pg_visibility 不适用 不适用 不适用
pgcrypto 1.1 1.1 1.1
pgrowlocks 1.1 1.1 1.1
pgstattuple 1.2 1.2 1.2
plcoffee 1.4.4 1.4.4 1.4.4
plls 1.4.4 1.4.4 1.4.4
plperl 1.0 1.0 1.0
plpgsql 1.0 1.0 1.0
pltcl 1.0 1.0 1.0
plv8 1.4.4 1.4.4 1.4.4
PostGIS 2.1.8 2.1.8 2.1.8
postgis_tiger_geocoder 2.1.8 2.1.8 2.1.8
postgis_topology 2.1.8 2.1.8 2.1.8
postgres_fdw 1.0 1.0 1.0
sslinfo 1.0 1.0 1.0
tablefunc 1.0 1.0 1.0
test_parser 1.0 1.0 1.0
tsearch2 1.0 1.0 1.0
tsm_system_rows 不适用 不适用 不适用
tsm_system_time 不适用 不适用 不适用
unaccent 1.0 1.0 1.0
uuid-ossp 1.0 1.0 1.0
Amazon RDS 支持的 PostgreSQL 版本 9.5.x 扩展

下表所示为 Amazon RDS 上的 PostgreSQL 目前支持的 PostgreSQL 版本 9.5.x 的 PostgreSQL 扩展。“N/A”表示该扩展不适用于该 PostgreSQL 版本。有关 PostgreSQL 扩展的详细信息,请参阅将相关对象打包为扩展

扩展 9.5.2 9.5.4 9.5.6
address_standardizer 2.2.2 2.2.2 2.2.5
address_standardizer_data_us 2.2.2 2.2.2 2.2.5
绽放 不适用 不适用 不适用
btree_gin 1.0 1.0 1.0
btree_gist 1.1 1.1 1.1
chkpass 1.0 1.0 1.0
citext 1.1 1.1 1.1
cube 1.0 1.0 1.0
dblink 1.1 1.1 1.1
dict_int 1.0 1.0 1.0
dict_xsyn 1.0 1.0 1.0
earthdistance 1.0 1.0 1.0
fuzzystrmatch 1.0 1.0 1.0
hstore 1.3 1.3 1.3
hstore_plperl 1.0 1.0 1.0
intagg 1.0 1.0 1.0
intarray 1.0 1.0 1.0
ip4r 2.0 2.0 2.0
isn 1.0 1.0 1.0
log_fdw - 请参阅 使用 log_fdw 扩展 不适用 不适用 不适用
ltree 1.0 1.0 1.0
pg_buffercache 1.1 1.1 1.1
pg_freespacemap 不适用 不适用 1.0
pg_hint_plan 不适用 不适用 1.1.3
pg_prewarm 1.0 1.0 1.0
pg_stat_statements 1.3 1.3 1.3
pg_trgm 1.1 1.1 1.1
pg_visibility 不适用 不适用 不适用
pgcrypto 1.2 1.2 1.2
pgrowlocks 1.1 1.1 1.1
pgstattuple 1.3 1.3 1.3
plcoffee 1.4.4 1.4.4 1.4.4
plls 1.4.4 1.4.4 1.4.4
plperl 1.0 1.0 1.0
plpgsql 1.0 1.0 1.0
pltcl 1.0 1.0 1.0
plv8 1.4.4 1.4.4 1.4.4
PostGIS 2.2.2 2.2.2 2.2.5
postgis_tiger_geocoder 2.2.2 2.2.2 2.2.5
postgis_topology 2.2.2 2.2.2 2.2.5
postgres_fdw 1.0 1.0 1.0
sslinfo 1.0 1.0 1.0
tablefunc 1.0 1.0 1.0
test_parser 1.0 1.0 1.0
tsearch2 1.0 1.0 1.0
tsm_system_rows 不适用 不适用 1.0
tsm_system_time 不适用 不适用 1.0
unaccent 1.0 1.0 1.0
uuid-ossp 1.0 1.0 1.0
Amazon RDS 支持的 PostgreSQL 版本 9.6.x 扩展

下表所示为 Amazon RDS 上的 PostgreSQL 目前支持的 PostgreSQL 版本 9.6.x 的 PostgreSQL 扩展。“N/A”表示该扩展不适用于该 PostgreSQL 版本。有关 PostgreSQL 扩展的详细信息,请参阅将相关对象打包为扩展

扩展 9.6.1 9.6.2
address_standardizer 2.3.0 2.3.2
address_standardizer_data_us 2.3.0 2.3.2
绽放 1.0 1.0
btree_gin 1.0 1.0
btree_gist 1.2 1.2
chkpass 1.0 1.0
citext 1.3 1.3
cube 1.2 1.2
dblink 1.2 1.2
dict_int 1.0 1.0
dict_xsyn 1.0 1.0
earthdistance 1.1 1.1
fuzzystrmatch 1.1 1.1
hstore 1.4 1.4
hstore_plperl 1.0 1.0
intagg 1.1 1.1
intarray 1.2 1.2
ip4r 2.0 2.0
isn 1.1 1.1
log_fdw - 请参阅 使用 log_fdw 扩展 不适用 1.0
ltree 1.1 1.1
pg_buffercache 1.2 1.2
pg_freespacemap 不适用 1.1
pg_hint_plan 不适用 1.1.3
pg_prewarm 1.1 1.1
pg_stat_statements 1.4 1.4
pg_trgm 1.3 1.3
pg_visibility 1.1 1.1
pgcrypto 1.3 1.3
pgrowlocks 1.2 1.2
pgstattuple 1.4 1.4
plcoffee 1.5.3 1.5.3
plls 1.5.3 1.5.3
plperl 1.0 1.0
plpgsql 1.0 1.0
pltcl 1.0 1.0
plv8 1.5.3 1.5.3
PostGIS 2.3.0 2.3.2
postgis_tiger_geocoder 2.3.0 2.3.2
postgis_topology 2.3.0 2.3.2
postgres_fdw 1.0 1.0
sslinfo 1.2 1.2
tablefunc 1.0 1.0
test_parser 1.0 1.0
tsearch2 1.0 1.0
tsm_system_rows 1.0 1.0
tsm_system_time 1.0 1.0
unaccent 1.1 1.1
uuid-ossp 1.1 1.1
Amazon RDS 上对 PostGIS 的 PostgreSQL 扩展支持

下表显示了 Amazon RDS PostgreSQL 版本随附的 PostGIS 组件版本:

版本 PostGIS GEOS GDAL PROJ
9.3.12 2.1.8 r13780 3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.4,2016 年 1 月 25 日发布

版本 4.9.2,2015 年 9 月 8 日

9.3.14 2.1.8 r13780 3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.5,2016 年 7 月 1 日发布

版本 4.9.2,2015 年 9 月 8 日

9.3.16 2.1.8 r13780 3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.5,2016 年 7 月 1 日发布

版本 4.9.2,2015 年 9 月 8 日

9.4.7

2.1.8 r13780

3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.4,2016 年 1 月 25 日发布

版本 4.9.2,2015 年 9 月 8 日
9.4.9

2.1.8 r13780

3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.5,2016 年 7 月 1 日发布

版本 4.9.2,2015 年 9 月 8 日
9.4.11

2.1.8 r13780

3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.5,2016 年 7 月 1 日发布

版本 4.9.2,2015 年 9 月 8 日
9.5.2

2.2.2 r14797

3.5.0-CAPI-1.9.0 r4084

GDAL 2.0.2,2016 年 1 月 26 日发布

版本 4.9.2,2015 年 9 月 8 日
9.5.4

2.2.2 r14797

3.5.0-CAPI-1.9.0 r4084

GDAL 2.0.3,2016 年 7 月 1 日发布

版本 4.9.2,2015 年 9 月 8 日
9.5.6

2.2.5 r15298

3.5.1-CAPI-1.9.1 r4246

GDAL 2.0.3,2016 年 7 月 1 日发布

版本 4.9.3,2016 年 8 月 15 日

9.6.1

2.3.0 r15146

3.5.0-CAPI-1.9.0 r4084

GDAL 2.1.1,2016 年 7 月 7 日发布

版本 4.9.2,2015 年 9 月 8 日
9.6.2

2.3.2 r15302

3.5.1-CAPI-1.9.1 r4246

GDAL 2.1.3,2017 年 1 月 20 日发布

版本 4.9.3,2016 年 8 月 15 日

请注意,您必须先运行以下命令创建 PostGIS 扩展才能使用它。

CREATE EXTENSION POSTGIS;
使用 log_fdw 扩展

log_fdw 是 Amazon RDS for PostgreSQL 版本 9.6.2 及更高版本中新增的扩展。它允许您使用 SQL 界面访问数据库引擎日志。除了查看 RDS 上默认生成的 stderr 日志文件以外,您还可以查看 CSV 日志 (将 log_destination 参数设置为 csvlog) 并利用整齐地分成几列的数据构建外部表。

此扩展引入了两个新函数,便于创建数据库日志的外部表:

  • list_postgres_log_files() - 列出数据库日志目录中的文件,以及文件大小 (以字节为单位)。

  • create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text) - 针对当前数据库中的指定文件构建外部表。

log_fdw 创建的所有函数均归 rds_superuser 所有。rds_superuser 角色的成员可以将这些函数的访问权限授予其他数据库用户。

以下示例展示了如何使用 log_fdw 扩展。

使用 log_fdw 扩展

  1. 获取 log_fdw 扩展。

    postgres=> CREATE EXTENSION log_fdw; CREATE EXTENSION
  2. 创建日志服务器,作为外部数据包装程序。

    postgres=> CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw; CREATE SERVER
  3. 选择日志文件列表中的所有文件。

    postgres=> SELECT * from list_postgres_log_files() order by 1;

    示例响应如下所示:

    file_name | file_size_bytes ----------------------------------+----------------- postgresql.log.2016-08-09-22.csv | 1111 postgresql.log.2016-08-09-23.csv | 1172 postgresql.log.2016-08-10-00.csv | 1744 postgresql.log.2016-08-10-01.csv | 1102 (4 rows)
  4. 创建一个表,为只有 "log_entry" 一列的非 CSV 文件

    postgres=> SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2016-08-09-22.csv');

    示例响应如下所示:

    ----------------------------------- (1 row)
  5. 选择日志文件的示例。以下代码检索日志时间和错误消息描述。

    postgres=> SELECT log_time, message from my_postgres_error_log order by 1;

    示例响应如下所示:

    log_time | message ----------------------------------+--------------------------------------------------------------------------- Tue Aug 09 15:45:18.172 2016 PDT | ending log output to stderr Tue Aug 09 15:45:18.175 2016 PDT | database system was interrupted; last known up at 2016-08-09 22:43:34 UTC Tue Aug 09 15:45:18.223 2016 PDT | checkpoint record is at 0/90002E0 Tue Aug 09 15:45:18.223 2016 PDT | redo record is at 0/90002A8; shutdown FALSE Tue Aug 09 15:45:18.223 2016 PDT | next transaction ID: 0/1879; next OID: 24578 Tue Aug 09 15:45:18.223 2016 PDT | next MultiXactId: 1; next MultiXactOffset: 0 Tue Aug 09 15:45:18.223 2016 PDT | oldest unfrozen transaction ID: 1822, in database 1 (7 rows)

支持的 PostgreSQL 功能

Amazon RDS 支持许多最常见的 PostgreSQL 功能。包括:

Amazon RDS 上 PostgreSQL 的逻辑复制

从 PostgreSQL 版本 9.4 开始,PostgreSQL 支持使用逻辑复制槽流式处理 WAL 更改。Amazon RDS 支持 PostgreSQL 数据库实例版本 9.4.9 及更高版本,和 9.5.4 及更高版本的逻辑复制。使用逻辑复制,您可以在实例上设置逻辑复制槽并通过这些槽将数据库更改流式传输到对某个客户端 (如 pg_recvlogical)。逻辑槽将在数据库级别创建并支持与单个数据库的复制连接。

Amazon RDS 上的 PostgreSQL 逻辑复制由新参数、新复制连接类型和新安全角色启用。复制的客户端可以是能够建立与 PostgreSQL 数据库实例上数据库的复制连接的任何客户端。

PostgreSQL 逻辑复制的最常见客户端是 AWS Database Migration Service 或 AWS EC2 实例上的自定义托管主机。逻辑复制槽不知道有关流接收方的任何信息;因此目标无需是副本数据库。请注意,如果您设置逻辑复制槽并且不从该槽进行读取,则数据可写入您的数据库实例存储,而且您可以快速填满实例上的存储。

有关将逻辑复制和 PostgreSQL 结合使用的更多信息,请参阅 PostgreSQL 文档。[https://www.postgresql.org/docs/current/static/logicaldecoding-example.html]

要为 Amazon RDS for PostgreSQL 数据库实例启用逻辑复制,您必须执行以下操作:

  • 为 Amazon RDS 上的 PostgreSQL 数据库启动逻辑复制的 AWS 用户账户必须拥有 rds_superuser 角色和 rds_replication 角色。rds_replication 角色可授予管理逻辑槽并使用逻辑槽流式处理数据的权限。

  • rds.logical_replication 参数设置为 1。它是需要重启才能生效的静态参数。作为应用此参数的一部分,我们将设置 wal_levelmax_wal_sendersmax_replication_slotsmax_connections 参数。请注意,这些参数更改可能会增加 WAL 生成,因此您只应在使用逻辑槽时设置 rds.logical_replication 参数。

  • 请按下面的说明创建逻辑复制槽。此过程需要指定一个解码插件;目前,我们支持 PostgreSQL 附带的“test_decoding”输出插件。

使用逻辑复制槽

您可以通过 SQL 命令来使用逻辑槽。例如,以下命令使用默认的 PostgreSQL 输出插件 test_decoding 创建一个名为 test_slot 的逻辑槽。

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 master --host sg-postgresql1.c6c8mresaghgv0.us-west-2.rds.amazonaws.com -f - --start
Amazon RDS 上 PostgreSQL 的事件触发器

PostgreSQL 版本 9.4.9 及更高版本、版本 9.5.4 及更高版本支持事件触发器,并且 Amazon RDS 支持这些版本的事件触发器。主用户账户可用于创建、修改、重命名和删除事件触发器。事件触发器位于数据库实例级别,因此它们可应用于实例上的所有数据库。

例如,以下代码创建在每个 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 数据库实例,您必须在升级该实例之前删除事件触发器。

Amazon RDS for PostgreSQL 的大页

Amazon RDS for PostgreSQL 支持 PostgreSQL 版本 9.4.11 及更高版本、9.5.6 及更高版本和 9.6.2 及更高版本的多种分页大小。此支持包括 4K 和 2MB 分页大小。

在使用大的连续内存数据块时,大页可以减少开销。您可以通过使用对 mmapSYSV 共享内存的调用,为应用程序分配大页。您可以使用 huge_pages 参数在 Amazon RDS for PostgreSQL 数据库上启用大页。将此参数设置为“on”可使用大页;默认值为“off”。

huge_pages 参数设置为“on”时,Amazon RDS 基于可用共享内存来使用大页。如果由于共享内存约束,数据库实例无法使用大页,Amazon RDS 会阻止实例启动,并将数据库实例的状态设置为不兼容参数状态。在这种情况下,您可以将 huge_pages 参数设置为“off”以允许 Amazon RDS 启动数据库实例。

shared_buffers 参数是设置使用大页所需的共享内存池的关键。shared_buffers 参数的默认值设置为对该实例内存可用的总共 8K 分页的百分比。当您使用 huge_pages 时,这些分页将分配到联接在一起的 huge_pages。请注意,如果共享内存参数设置为需要 90% 以上的数据库实例内存,则 Amazon RDS 将数据库实例置于不兼容参数状态。有关为 PostgreSQL 设置共享内存的更多信息,请参阅 PostgreSQL 文档

注意

db.m1、db.m2、db.m3 和 db.t1 数据库实例类不支持大页。

Amazon RDS 上 PostgreSQL 的表空间

Amazon RDS 上的 PostgreSQL 支持表空间以实现兼容性;因为所有存储都处于单个逻辑卷上,所以表空间无法用于 IO 拆分或隔离。我们的基准和实践经验表明单个逻辑卷是适用于大多数使用案例的最佳设置。

Amazon RDS 上的 PostgreSQL 的 Autovacuum

PostgreSQL auto-vacuum 是一个强烈建议使用的可选参数,默认情况下,为新的 PostgreSQL 数据库实例启用此参数。请不要禁用此参数。有关将 auto-vacuum 用于 Amazon RDS PostgreSQL 的更多信息,请参阅在 Amazon RDS 上使用 PostgreSQL Autovacuum

stats_temp_directory 的 RAM 磁盘

Amazon RDS for PostgreSQL 参数 rds.pg_stat_ramdisk_size 可用于指定分配给 RAM 磁盘的用于存储 PostgreSQL stats_temp_directory 的系统内存。RAM 磁盘参数适用于 Amazon RDS 上的所有 PostgreSQL 版本。

在某些工作负载下,设置此参数可提高性能并降低 IO 要求。有关 stats_temp_directory 的更多信息,请参阅 PostgreSQL 文档

要为您的 stats_temp_directory 启用 RAM 磁盘,可在数据库实例中使用的参数组中将 rds.pg_stat_ramdisk_size 参数设置为非零值。此参数值以 MB 为单位。您必须先重启数据库实例,然后更改才会生效。

例如,以下 AWS CLI 命令将 RAM 磁盘参数设置为 256 MB:

postgres=>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)
适用于 PostgreSQL 的 ALTER ENUM

Amazon RDS PostgreSQL 版本 9.6.2 和 9.5.6 及更高版本支持更改枚举功能。Amazon RDS 的其他版本不提供此功能。

以下代码为更改枚举值的示例。

postgres=> CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple'); CREATE TYPE postgres=> CREATE TABLE t1 (colors rainbow); CREATE TABLE postgres=> INSERT INTO t1 VALUES ('red'), ( 'orange'); INSERT 0 2 postgres=> 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)

PostgreSQL 数据库实例的限制

最多可购买 40 个 PostgreSQL 数据库实例。以下是 Amazon RDS 上 PostgreSQL 限制的列表:

  • PostgreSQL 数据库实例的最小存储大小为 5 GB。

  • 每个 PostgreSQL 数据库实例的最大存储大小均为 6 TB。

  • Amazon RDS 保留了多达 3 个供系统维护使用的连接。如果为用户连接参数指定一个值,需要为您希望使用的连接数目加上 3。

升级 PostgreSQL 数据库实例

您可以为 PostgreSQL 数据库实例选择两种升级方式。

  • 操作系统更新 - 有时,为了应用安全修复或操作系统更改,Amazon RDS 可能需要更新数据库实例的基础操作系统。您可通过使用 RDS 控制台、AWS Command Line Interface (AWS CLI) 或 RDS API 来决定 Amazon RDS 何时应用操作系统更新。

    有关操作系统更新的更多信息,请参阅 更新数据库实例或数据库群集的操作系统

  • 数据库引擎升级 - 如果 Amazon RDS 支持数据库引擎的新版本,您可以将您的数据库实例升级到新版本。有两种升级方式:主要版本升级和次要版本升级。Amazon RDS 支持 PostgreSQL 数据库实例的主要和次要版本升级。

    有关 PostgreSQL 数据库引擎升级的更多信息,请参阅 升级 PostgreSQL 数据库引擎

对 PostgreSQL 数据库实例使用 SSL

Amazon RDS 支持对 PostgreSQL 数据库实例进行 SSL 加密。使用 SSL 可加密应用程序与 PostgreSQL 数据库实例之间的 PostgreSQL 连接。您还可强制至 PostgreSQL 数据库实例的所有连接使用 SSL。

所有 AWS 区域均支持对 PostgreSQL 使用 SSL。在创建 PostgreSQL 数据库实例时,Amazon RDS 会为实例创建一个 SSL 证书。如果启用 SSL 证书验证,SSL 证书会将数据库实例终端节点作为 SSL 证书的公用名 (CN) 包含在内以防止欺诈攻击。

通过 SSL 连接到 PostgreSQL 数据库实例

  1. 下载存储于 https://s3.amazonaws.com/rds-downloads/rds-cn-north-1-ca-certificate.pem 的证书。

  2. 将证书导入您的操作系统。

  3. 向连接字符串后追加 sslmode=verify-full,通过 SSL 连接到您的 PostgreSQL 数据库实例。当您使用 sslmode=verify-full 时,SSL 连接将针对 SSL 证书中的终端节点验证数据库实例终端节点。

    使用 sslrootcert 参数引用证书,例如,sslrootcert=rds-ssl-ca-cert.pem

下面是使用 psql 程序连接到 PostgreSQL 数据库实例的示例:

$ psql -h testpg.cdhmuqifdpib.us-east-1.rds.amazonaws.com -p 5432 \ "dbname=testpg user=testuser sslrootcert=rds-ca-2015-root.pem sslmode=verify-full"
需要至 PostgreSQL 数据库实例的 SSL 连接

您可使用 rds.force_ssl 参数要求至 PostgreSQL 数据库实例的连接使用 SSL。默认情况下,rds.force_ssl 参数设置为 0 (off)。您可将 rds.force_ssl 参数设置为 1 (on) 以要求至数据库实例的 SSL 连接。更新 rds.force_ssl 参数还会将 PostgreSQL ssl 参数设置为 1 (on) 并将数据库实例的 pg_hba.conf 文件修改为支持新的 SSL 配置。

您可通过更新数据库实例的参数组来设置 rds.force_ssl 参数值。如果数据库实例的参数组不是默认参数组,而 ssl 参数在您将 rds.force_ssl 参数设置为 1 时已设置为 1,则您无需重新启动数据库实例。否则您必须重新启动数据库实例更改才会生效。有关参数组的更多信息,请参阅使用数据库参数组

当数据库实例的 rds.force_ssl 参数设置为 1 时,您将在连接时看到与下类似的输出,指示现在需要 SSL:

$ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql (9.3.12, server 9.4.4) WARNING: psql major version 9.3, server major version 9.4. Some psql features might not work. SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>
确定 SSL 连接状态

当您连接到数据库实例后,登录横幅中将显示连接的加密状态:

Password for user master: psql (9.3.12) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help.   postgres=>

也可加载 sslinfo 扩展,然后调用 show ssl 函数以判断是否在使用 SSL。如果连接使用的是 SSL,则此函数将返回 on;否则返回 off

postgres=> create extension sslinfo; CREATE EXTENSION postgres=> show ssl; ssl ---- on (1 row)

您可使用 select ssl_cipher() 命令确定 SSL 密码:

postgres=> select ssl_cipher(); ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)

如果您启用 set rds.force_ssl 并重新启动实例,则将拒绝非 SSL 连接并返回以下消息:

$ export PGSSLMODE=disable $ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql: FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off $