将数据从 RDS for PostgreSQL 数据库实例导出到 Amazon S3
您可以从 RDS for PostgreSQL 数据库实例中查询数据,并将数据直接导出到存储在 Amazon S3 存储桶中的文件中。为此,您首先要安装 RDS for PostgreSQL aws_s3
扩展。该扩展为您提供了用于将查询结果导出到 Amazon S3 的函数。接下来,您可以了解如何安装扩展以及如何将数据导出到 Amazon S3。
注意
不支持跨账户导出到 Amazon S3。
所有当前可用的 RDS for PostgreSQL 版本都支持将数据导出到 Amazon Simple Storage Service。有关详细版本信息,请参阅《Amazon RDS for PostgreSQL 版本注释》中的 Amazon RDS for PostgreSQL 更新。
如果您没有为导出设置桶,请参阅《Amazon Simple Storage Service 用户指南》中的以下主题。
默认情况下,从 RDS for PostgreSQL 导出到 Amazon S3 的数据使用具有 Amazon 托管式密钥的服务器端加密。如果您使用存储桶加密,则 Amazon S3 存储桶必须使用 Amazon Key Management Service(Amazon KMS)密钥(SSE-KMS)进行加密。目前,不支持使用 Amazon S3 托管式密钥(SSE-S3)加密的存储桶。
注意
您可以使用Amazon Web Services Management Console、Amazon CLI 或 Amazon RDS API 将数据库快照数据保存到 Amazon S3。有关更多信息,请参阅 将 Amazon RDS 的数据库快照数据导出到 Amazon S3。
主题
安装 aws_s3 扩展名
在将 Amazon Simple Storage Service 用于 RDS for PostgreSQL 数据库实例之前,您需要安装 aws_s3
扩展。此扩展提供将数据从 RDS for PostgreSQL 数据库实例中导出到 Amazon S3 桶的函数。它还提供从 Amazon S3 导入数据的函数。有关更多信息,请参阅 将 Amazon S3 中的数据导入到 RDS for PostgreSQL 数据库实例。aws_s3
扩展依赖于 aws_commons
扩展(需要时自动安装)中的一些帮助程序函数。
安装 aws_s3
扩展
使用 psql(或 pgAdmin)以具有
rds_superuser
权限的用户身份,连接到 RDS for PostgreSQL 数据库实例。如果您在设置过程中保留原定设置名称,则以postgres
进行连接。psql --host=
111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password要安装扩展,请运行以下命令。
postgres=>
CREATE EXTENSION aws_s3 CASCADE;NOTICE: installing required extension "aws_commons" CREATE EXTENSION
要验证扩展是否已安装,可以使用 psql
\dx
元命令。postgres=>
\dxList of installed extensions Name | Version | Schema | Description -------------+---------+------------+--------------------------------------------- aws_commons | 1.2 | public | Common data types across Amazon services aws_s3 | 1.1 | public | Amazon S3 extension for importing data from S3 plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (3 rows)
从 Amazon S3 导入数据和将数据导出到 Amazon S3 的函数现在可供使用。
验证您的 RDS for PostgreSQL 版本支持导出到 Amazon S3
您可以使用 describe-db-engine-versions
命令验证 RDS for PostgreSQL 版本是否支持导出到 Amazon S3。以下示例验证对版本 10.14 的支持。
aws rds describe-db-engine-versions --region us-east-1 --engine postgres --engine-version 10.14 | grep s3Export
如果输出包含字符串 "s3Export"
,则该引擎支持 Amazon S3 导出。否则,该引擎不支持它们。
将数据导出到 Amazon S3 概述
要将存储在 RDS for PostgreSQL 数据库中的数据导出到 Amazon S3 存储桶,请使用以下过程。
将 RDS for PostgreSQL 数据导出到 S3
-
标识要用于导出数据的 Amazon S3 文件路径。有关此过程的详细信息,请参阅指定要导出到的 Amazon S3 文件路径。
-
提供权限以访问 Amazon S3 存储桶。
要将数据导出到 Amazon S3 文件,请为 RDS for PostgreSQL 数据库实例提供权限以访问导出将用于存储的 Amazon S3 存储桶。此操作包括以下步骤:
-
创建一个 IAM 策略,该策略提供对要导出到的 Amazon S3 存储桶的访问权限。
-
创建一个 IAM 角色。
-
将您创建的策略附在您创建的角色上。
-
将此 IAM 角色添加到数据库实例。
有关此过程的详细信息,请参阅设置 Amazon S3 存储桶的访问权限。
-
-
标识数据库查询以获取数据。通过调用
aws_s3.query_export_to_s3
函数来导出查询数据。在完成上述准备任务后,请使用 aws_s3.query_export_to_s3 函数将查询结果导出到 Amazon S3。有关此过程的详细信息,请参阅使用 aws_s3.query_export_to_s3 函数导出查询数据。
指定要导出到的 Amazon S3 文件路径
指定以下信息以标识要将数据导出到的 Amazon S3 中的位置:
-
存储桶名称 – 存储桶是 Amazon S3 对象或文件的容器。
有关使用 Amazon S3 存储数据的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的创建存储桶和查看对象。
-
文件路径 – 文件路径标识 Amazon S3 存储桶中存储导出的位置。文件路径包含以下内容:
-
用于标识虚拟文件夹路径的可选路径前缀。
-
用于标识要存储的一个或多个文件的文件前缀。较大的导出将存储在多个文件中,每个文件的最大大小约为 6 GB。其他文件名具有相同的文件前缀,但追加了
_part
。XX
表示 2,然后表示 3,依此类推。XX
例如,具有
exports
文件夹和query-1-export
文件前缀的文件路径为/exports/query-1-export
。 -
-
Amazon区域(可选)– Amazon S3 存储桶所在的Amazon区域。如果您未指定Amazon区域值,则 Amazon RDS 会将文件保存到导出的数据库实例所在的同一Amazon区域中的 Amazon S3 中。
注意
目前,Amazon 区域必须与导出的数据库实例的区域相同。
有关 Amazon 区域名称和关联值的列表,请参阅区域、可用区和 Local Zones。
要保存有关导出的存储位置的 Amazon S3 文件信息,您可以使用 aws_commons.create_s3_uri 函数创建一个 aws_commons._s3_uri_1
复合结构,如下所示。
psql=> SELECT aws_commons.create_s3_uri( '
amzn-s3-demo-bucket
', 'sample-filepath', 'us-west-2' ) AS s3_uri_1 \gset
稍后,您可以在对 s3_uri_1
函数的调用中将该 aws_s3.query_export_to_s3 值作为参数提供。有关示例,请参阅 使用 aws_s3.query_export_to_s3 函数导出查询数据。