使用 pg_dump、pg_dumpall 和 pg_restore 导出和导入

本页面介绍如何使用 pg_dump、pg_dumpall 和 pg_restore 将数据导入到 Cloud SQL 实例中,以及从 Cloud SQL 实例中导出数据。

准备工作

导出操作会使用数据库资源,但不会干扰正常的数据库操作,除非实例预配不足。

如需最佳实践,请参阅导入和导出数据的最佳实践

完成导入操作后,请验证结果。

详细了解 pg_dumppg_dumpallpg_restore 实用程序。

从 Cloud SQL for PostgreSQL 导出数据

您可以使用 Cloud SQL 从 Google Cloud 控制台、gcloud CLI 或 API 执行导出。

  • 如需导出单个 PostgreSQL 数据库,请使用 pg_dump 实用程序。
  • 如需导出集群的所有 PostgreSQL 数据库,请使用 pg_dumpall 实用程序。

使用任一实用程序时,还请确保使用所需的选项,以确保生成的导出文件可重新导入 Cloud SQL。

使用 pg_dump 从本地 PostgreSQL 服务器导出数据

如需导出非 Cloud SQL 管理的数据库,以便稍后导入 Cloud SQL,请将 pg_dump 实用程序与以下标志搭配使用:

  • --no-owner

    转储文件中不得包含所有权更改命令。

  • --format

    如果转储文件可以与 pg_restore 搭配使用,则允许使用 customdirectory 格式。

    对于 plain-text 格式,请改为导出到 SQL dump file。此格式与 pg_restore 不兼容,必须使用 Google Cloud 控制台导入命令或 psql 客户端导入。

  • --no-acl

    如果您的转储包含要在 SUPERUSER 角色中授予或撤消成员资格的语句,则必须使用此标志。

  • --clean

    通过此可选标志,您可以添加在导入之前删除(清理)数据库对象所需的 DROP <object> SQL 语句。

  • --if-exists

    通过此可选标志,您可以在由 clean 标志生成的每个 DROP 语句中添加 IF EXISTS SQL 语句。

此外,您还必须移除所有以下内容:

  • 与扩展程序相关的语句(如果 Cloud SQL 不支持该扩展程序)。如需查看受支持扩展程序的列表,请参阅 PostgreSQL 扩展程序
  • 引用 plpgsql 的 CREATE EXTENSIONDROP EXTENSION 语句。此扩展程序预安装在 Cloud SQL Postgres 实例上。
  • COMMENT ON EXTENSION 语句。

确认由数据库设置确定的默认编码是否适合您的数据。如果需要,您可以使用 --encoding 标志替换默认值。

使用 custom 格式从 Cloud SQL for PostgreSQL 导出数据

如需使用自定义格式,请从命令行运行 pg_dump

pg_dump \
-U USERNAME \
--format=custom \
--no-owner \
--no-acl \
DATABASE_NAME > DATABASE_NAME.dmp

从 Cloud SQL for PostgreSQL 并行导出多个文件中的数据

您只能使用 directory 输出格式并行导出多个文件中的数据

如需执行并行导出,请使用 -j NUM_CORES 标志。NUM_CORES 是源实例上的核心数。

导出所有数据库

pg_dumpall 是一个实用程序,可让您将集群的所有 PostgreSQL 数据库提取到单个脚本文件中。此文件包含可用于恢复数据库的 SQL 命令。

如需导出 Cloud SQL 实例中的所有 PostgreSQL 数据库,请使用带有以下必需标志的 pg_dumpall 实用程序:

  • exclude-database=cloudsqladmin
  • exclude-database=template*

pg_dumpall 实用程序无权访问 cloudsqladmintemplate 数据库。

如需导出所有 PostgreSQL 数据库,请运行以下命令:

pg_dumpall \
-h HOST_NAME -l DATABASE_NAME –exclude-database=cloudsqladmin \
–exclude-database=template* > pg_dumpall.sql

如需在使用 pg_dumpall 转储角色时查看角色密码,请cloudsql.pg_authid_select_role 标志设置为 PostgreSQL 角色名称。如果该角色存在,则它对 pg_authid 表拥有只读 (SELECT) 访问权限。此表包含角色密码。

导入

使用 pg_restore 实用程序将归档导入 Cloud SQL 数据库。pg_restore 仅适用于 pg_dump 创建的格式为 customdirectory 的归档。详细了解 pg_restore

从使用 custom 格式创建的转储文件导入到 Cloud SQL for PostgreSQL

如果转储文件是使用自定义格式创建的,请运行以下命令:

pg_restore \
--list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

来自 sed 的后处理操作会注释掉 SQL 转储文件中的所有扩展程序语句。

使用 pg_restore 导入时,通过命令行参数“--use-list=DATABASE_NAME.toc”指定已处理的目录。

将多个文件中的数据并行导入 Cloud SQL for PostgreSQL

您只能针对使用 directorycustom 输出格式创建的归档并行导入多个文件中的数据

如需执行并行导入,请使用 -j NUM_CORES 标志。NUM_CORES 是目标实例上的核心数。

Cloud SQL for PostgreSQL 上的导入性能

后续步骤