本页面介绍如何使用 pg_dump、pg_dumpall 和 pg_restore 将数据导入到 Cloud SQL 实例中,以及从 Cloud SQL 实例中导出数据。
准备工作
导出操作会使用数据库资源,但不会干扰正常的数据库操作,除非实例预配不足。
如需最佳实践,请参阅导入和导出数据的最佳实践。
完成导入操作后,请验证结果。
详细了解 pg_dump
、pg_dumpall
和 pg_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
搭配使用,则允许使用custom
和directory
格式。对于
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 EXTENSION
或DROP 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
实用程序无权访问 cloudsqladmin
或 template
数据库。
如需导出所有 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 创建的格式为 custom
或 directory
的归档。详细了解 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
您只能针对使用 directory
和 custom
输出格式创建的归档并行导入多个文件中的数据。
如需执行并行导入,请使用 -j NUM_CORES
标志。NUM_CORES 是目标实例上的核心数。
Cloud SQL for PostgreSQL 上的导入性能
后续步骤
- 了解如何查看导入和导出操作的状态。
- 详细了解导入和导出数据的最佳做法。
- 详细了解 PostgreSQL pg_dump 实用程序。
- 导入和导出的已知问题。