使用 pg_dump 和 pg_restore 导出和导入

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

准备工作

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

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

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

正在导出

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

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

  • --no-owner

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

  • --format

    Cloud SQL API 仅支持 plain SQL 格式。

    如果转储文件支持 pg_restore,则允许使用 custom 格式。

  • --no-acl

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

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

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

对于纯文本格式:从命令行运行 pg_dump

pg_dump \
-U USERNAME \
--format=plain \
--no-owner \
--no-acl \
DATABASE_NAME | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > SQL_FILE.sql

对于自定义格式:从命令行运行 pg_dump

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

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

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

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

如需执行并行导出,请使用 -j NUM_CORES 标志。NUM_CORES 是源实例上的核心数。如需执行并行导入,请将此相同标志与 pg_restore 搭配使用。

如需有关 pg_dump 的帮助,请参阅 pg_dump 参考文档

正在导入

使用 pg_restore 导入数据

您可以使用 pg_restore 实用程序将数据库导入 Cloud SQL。pg_restore 仅适用于 pg_dump 创建的归档文件。详细了解 pg_restore

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

pg_restore \
-h CLOUD_SQL_INSTANCE_IP \
-U USERNAME \
--no-owner \
--no-acl \
-d DATABASE_NAME \
SQL_FILE.sql

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

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

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

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

后续步骤