本页介绍了如何将 AlloyDB for PostgreSQL 集群中的数据以 CSV 格式导出到 Cloud Storage 存储桶,以供其他工具和环境使用。
如需了解如何将整个数据库从受支持的数据库服务器迁移到新的 AlloyDB 实例,请参阅使用 Database Migration Service 将数据库迁移到 AlloyDB。如果要导出数据以通过导出的文件创建新实例,请考虑从存储的备份恢复集群。
您可以取消从 AlloyDB for PostgreSQL 集群导出数据。如需了解详情,请参阅取消导出数据。
准备工作
- 在开始导出操作之前,请注意,导出操作会使用数据库资源,但不会干扰标准数据库操作,除非实例预配不足。
SELECT_QUERY
可以包含注释或前导和尾随空格。在运行导出查询之前,系统会忽略注释并删除空格。- 如果目标存储桶与源集群位于不同区域,则会产生区域间数据传输费用。如需了解详情,请参阅 AlloyDB for PostgreSQL 价格。
- 可以并行运行多个导出操作。
- 如果对象名称以
.gz
扩展名结尾,则启用压缩。然后,系统会将该对象以.gz
格式导出到 Cloud Storage。 - CSV 选项(例如
field_delimiter
、quote_character
和escape_character
)中的字符值仅允许使用十六进制代码中的 ASCII 字符(无论是否带有0x
前缀)。
从 AlloyDB 导出所需的角色和权限
如需将数据从 AlloyDB 导出到 Cloud Storage,启动导出的用户必须拥有以下 Identity and Access Management (IAM) 角色之一:
- Cloud AlloyDB Admin (
roles/alloydb.admin
) 角色 - 包括以下权限的自定义角色:
alloydb.clusters.get
alloydb.clusters.export
此外,AlloyDB 集群的服务账号必须拥有以下角色之一:
storage.objectAdmin
IAM 角色- 自定义角色,包括以下权限:
storage.objects.create
如需有关 IAM 角色的帮助,请参阅 Identity and Access Management。
将数据导出到 CSV 文件
在 CSV 导出期间,您可以指定要导出的架构。数据库级层下的所有架构都可以导出。
您可以使用 gcloud CLI 或 REST API 自定义 CSV 文件格式。
gcloud
- 创建 Cloud Storage 存储桶。
向服务账号授予对 Cloud Storage 存储桶的权限,以便执行导出操作。使用服务账号格式来确定要从中导出数据的项目的服务账号。服务账号的格式如下所示:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予storage.objectAdmin
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。将数据库导出到您的 Cloud Storage 存储桶。
运行 CSV 导出命令:TODO
gcloud alloydb clusters export
。下表列出了以 CSV 格式导出数据的选项:
--select-query
(必需):用于提取数据的 select 查询。
--async
(可选):立即返回,而无需等待正在进行的操作完成。--field-delimiter
(可选):指定文件中每行(线)中的列的分隔符。默认值为英文逗号。此参数的值必须是十六进制 ASCII 代码中的字符。--quote-character
(可选):指定在对数据值添加引号时要使用的引号字符。默认值为英文双引号。此参数的值必须是十六进制 ASCII 代码中的字符。--escape-character
(可选):指定必须出现在需要转义的数据字符之前的字符。默认值与--quote-character
相同。此参数的值必须是十六进制 ASCII 代码中的字符。
如需使用这些功能,请在 gcloud CLI 命令中添加这些选项。
否则,请从以下命令中移除这些参数:
gcloud alloydb clusters export CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" --select-query=SELECT_QUERY --field-delimiter=FIELD_DELIMITER --quote-character=QUOTE_CHARACTER --escape-character=ESCAPE_CHARACTER --csv
如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
REST v1
为导出创建一个存储桶:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>
使用服务账号格式来识别要从中导出数据的项目的服务账号。
服务账号的格式如下所示:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
此服务账号需要获得对 Cloud Storage 存储桶的权限,才能执行导出操作。
使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予
storage.objectAdmin
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。导出数据库。
使用以下 HTTP 方法和网址:
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- REGION:AlloyDB 集群的部署区域。
- CLUSTER_ID:集群 ID。
- BUCKET_NAME:Cloud Storage 存储桶名称。
- PATH_TO_CSV_FILE:CSV 文件的路径。
- DATABASE_NAME:AlloyDB 集群中数据库的名称。
SELECT_QUERY:导出的 SQL 查询。
ESCAPE_CHARACTER(可选):需转义的数据字符之前必须显示的字符。此参数的值必须是十六进制 ASCII 代码中的字符。例如,
22
表示双引号。QUOTE_CHARACTER(可选):此标志表示包含字符串数据类型列中的值的字符。此参数的值必须是十六进制 ASCII 代码中的字符。例如,
22
表示双引号。FIELD_DELIMITER(可选):用于拆分列值的字符。此参数的值必须是十六进制 ASCII 代码中的字符。例如,
2C
表示英文逗号。
请求 JSON 正文:
{ "gcs_destination": { "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE" }, "database": "DATABASE_NAME", "csv_export_options": { "select_query": "SELECT_QUERY", "escape_character": "ESCAPE_CHARACTER", "quote_character": "QUOTE_CHARACTER", "field_delimiter": "FIELD_DELIMITER" } }
如需发送请求,请使用以下任一方式:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
您会收到类似以下内容的 JSON 响应:
响应
{ "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata", "createTime": "2024-09-17T06:05:31.244428646Z", "target": "projects/PROJECT_ID/locations/REGION/clusters/TARGET_CLUSTER", "verb": "export", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
如果您不需要保留之前设置的 IAM 权限,请立即移除这些权限。
如需查看该请求的完整参数列表,请参阅 clusters:export
。
自定义 CSV 导出文件的格式
您可以使用 gcloud CLI 或 REST API 自定义 CSV 文件格式。执行导出时,您可以指定以下格式设置选项:
CSV 选项 |
默认值 |
gcloud 标志 |
REST API 属性 |
说明 |
---|---|---|---|---|
退出 |
默认值与 QUOTE 值相同。 |
--escape-character
|
escape_character |
出现在需要转义的数据字符之前的字符。 |
引用 |
"22" 双引号的 ASCII 十六进制代码。 |
--quote-character
|
quote_character |
指定在对数据值进行引用时要使用的引号字符。 |
字段分隔符 | "2C" 英文逗号的 ASCII 十六进制代码。 |
--field-delimiter |
field_delimiter |
用于拆分列值的字符。 |
例如,使用所有这些参数的 gcloud CLI 命令可能如下所示:
gcloud alloydb clusters export CLUSTER_NAME \
--region=REGION \
--database=DATABASE_NAME \
--gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
--select-query=SELECT_QUERY \
--field-delimiter='2C' \
--quote-character='22' \
--escape-character='5C'
--csv
等效的 REST API 请求正文如下所示:
{
"exportContext":
{
"gcs_destination": {
"uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
},
"database": "DATABASE_NAME",
"csv_export_options":
{
"select_query": "SELECT_QUERY",
"escape_character": "5C",
"quote_character": "22",
"field_delimiter": "2C",
}
}
}
默认情况下,CSV 导出功能会创建标准 CSV 输出。如果您需要比 AlloyDB 提供的更多选项,可以在 psql
客户端中使用以下语句:
\copy `TABLE_NAME` TO `CSV_FILE_NAME.csv' WITH
(FORMAT csv, ESCAPE 'ESCAPE_CHARACTER', QUOTE 'QUOTE_CHARACTER',
DELIMITER 'DELIMITER_CHARACTER', ENCODING 'UTF8', NULL 'NULL_MARKER_STRING');
后续步骤
- 了解如何导出 SQL 转储文件。
- 取消导出操作。