在数据库实例之间传输 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 上运行的本地数据库或数据库一起使用。