在数据库实例之间传输 PostgreSQL 数据库 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

数据库实例之间传输 PostgreSQL 数据库

通过将 PostgreSQL 可传输数据库用于 Amazon RDS,您可以在两个数据库实例之间传输 PostgreSQL 数据库。这是在不同数据库实例之间迁移大型数据库的一种非常快的方法。要使用该方法,两个数据库实例必须运行相同的 PostgreSQL 主要版本。

此功能要求您在源和目标数据库实例上均安装 pg_transport 扩展。pg_transport 扩展提供了一种以最少的处理来移动数据库文件的物理传输机制。该机制移动数据的速度比传统的转储和加载过程快得多,并减少了停机时间。

注意

PostgreSQL 可传输数据库在 RDS for PostgreSQL 11.5 和更高版本以及 RDS for PostgreSQL 版本 10.10 和更高版本中提供。

要将 PostgreSQL 数据库实例从一个 RDS for PostgreSQL 数据库实例传输到另一个,首先设置源实例和目标实例,如 设置数据库实例以进行传输 中详述。然后,您可以使用 传输 PostgreSQL 数据库 中所述的函数传输数据库。

在数据库传输期间发生的情况

PostgreSQL 可传输数据库功能使用拉取模式,将数据库从源数据库实例导入到目标数据库实例。transport.import_from_server 函数在目标数据库实例上创建传输中的数据库。在传输期间,无法在目标数据库实例上访问传输中的数据库。

在传输开始时,源数据库上的所有当前会话将会结束。源数据库实例上的源数据库以外的任何数据库不受传输影响。

源数据库被置于特殊只读模式。在处于该模式时,您可以连接到源数据库并运行只读查询。不过,阻止启用了写入的查询和某些其他类型的命令。仅正在传输的特定源数据库受这些限制的影响。

在传输期间,您无法将目标数据库实例还原到某个时间点。这是因为传输不是事务性的,并且不使用 PostgreSQL 预写日志记录更改。如果目标数据库实例启用了自动备份,则会在传输完成后自动创建备份。时间点还原适用于备份完成的时间。

如果传输失败,pg_transport 扩展将尝试撤消对源和目标数据库实例的所有更改。这包括删除目标的部分传输的数据库。根据失败类型,源数据库可能会继续拒绝启用了写入的查询。如果发生这种情况,请使用以下命令允许启用了写入的查询。

ALTER DATABASE db-name SET default_transaction_read_only = false;

使用 PostgreSQL 可传输数据库的限制

可传输数据库具有以下限制:

  • 只读副本 – 您无法在只读副本或只读副本的父实例上使用可传输数据库。

  • 不支持的列类型 – 您不能在打算使用该方法传输的任何数据库表中使用 reg 数据类型。这些类型取决于系统目录对象 ID (OID),这些 ID 在传输过程中经常发生变化。

  • 表空间 – 所有源数据库对象必须位于默认 pg_default 表空间中。

  • 兼容性 – 源和目标数据库实例必须运行相同的 PostgreSQL 主要版本。

  • 扩展 - 源数据库实例只能安装 pg_transport

  • 角色和 ACL – 源数据库的访问权限和所有权信息不会传输到目标数据库。所有数据库对象是由传输的本地目标用户创建和拥有的。

  • 并发传输 - 如果工件线程进程配置正确,单个数据库实例最多可支持 32 个并发传输,包括导入和导出。

  • 仅限 RDS for PostgreSQL 数据库实例 - PostgreSQL 可传输数据库仅在 RDS for PostgreSQL 数据库实例上支持。您不能将其与 Amazon EC2 上运行的本地数据库或数据库一起使用。