概述
本指南介绍了如何从 PostgreSQL 数据库导出数据以及如何将数据导入 PostgreSQL 数据库。您可以在官方 PostgreSQL 文档 中了解更多有关此主题的信息。
使用 pg_dump
导出数据
pg_dump
是一个原生 PostgreSQL 实用程序,您可以使用它从 PostgreSQL 数据库导出数据。要查看此命令的所有选项,请运行
pg_dump --help
这种转储方法的思路是生成一个包含 SQL 命令的文件,这些命令在反馈回服务器时会重新创建数据库,使其与转储时的状态相同。PostgreSQL 提供了用于此目的的实用程序
pg_dump
。pg_dump
是一个普通的 PostgreSQL 客户端应用程序(尽管它特别聪明)。这意味着您可以从任何可以访问数据库的远程主机执行此备份过程。但请记住,pg_dump
不使用特殊权限。特别是,它必须对要备份的所有表具有读取权限,因此为了备份整个数据库,您几乎总是必须以数据库超级用户的身份运行它。
该命令的基本语法如下所示
pg_dump DB_NAME > OUTPUT_FILE
您需要将 DB_NAME
和 OUTPUT_FILE
占位符替换为以下内容:
- 您的 **数据库名称**
- 所需 **输出文件** 的名称(应以
.sql
结尾以获得最佳的互操作性)
例如,要将本地 PostgreSQL 服务器上名为 mydb
的数据库中的数据导出到名为 mydb.sql
的文件中,您可以使用以下命令
pg_dump mydb > mydb.sql
如果您的数据库模式使用 对象标识符类型 (OID),您需要使用 --oids
(缩写为 -o
)选项运行 pg_dump
pg_dump mydb --oids > mydb.sql
提供数据库凭据
您可以添加以下参数来指定 PostgreSQL 数据库服务器的位置
参数 | 默认值 | 环境变量 | 描述 |
---|---|---|---|
--host (缩写为 -h ) | localhost | PGHOST | 服务器主机机器的地址 |
--port (缩写为 -p ) | - | PGPORT | 服务器主机机器上 PostgreSQL 服务器正在侦听的端口 |
要对 PostgreSQL 数据库服务器进行身份验证,您可以使用以下参数
参数 | 默认值 | 环境变量 | 描述 |
---|---|---|---|
--username (缩写为 -U ) | 您当前的操作系统用户名 | PGUSER | 数据库用户的名称。 |
例如,如果您要从具有以下 连接字符串 的 PostgreSQL 数据库导出数据
postgresql://opnmyfngbknppm:[email protected]:5432/d50rgmkqi2ipus
您可以使用以下 pg_dump
命令
pg_dump --host ec2-46-137-91-216.eu-west-1.compute.amazonaws.com --port 5432 --user opnmyfngbknppm d50rgmkqi2ipus > backup.sql
请注意,**此命令将触发一个提示,您需要在其中指定提供的用户的密码**。
控制输出
在某些情况下,您可能不想转储整个数据库,例如,您可能想要
- 只转储实际数据,但不包括 DDL(即定义数据库模式的 SQL 语句,例如
CREATE TABLE
等) - 只转储 DDL,但不包括实际数据
- 排除特定的 PostgreSQL 模式
- 排除大型文件
- 排除特定表
以下是在这些情况下您可以使用的一些命令行选项概述
从 SQL 文件导入数据
使用 SQL Dump 将您的 PostgreSQL 数据库导出为 SQL 文件后,您可以通过将 SQL 文件输入 psql
来恢复数据库的状态。
psql DB_NAME < INPUT_FILE
您需要用相应的实际值替换 DB_NAME
和 INPUT_FILE
占位符,分别对应:
- 您的 **数据库名称** (必须先创建具有该名称的数据库!)
- 目标 **输入文件** 的名称(通常以
.sql
结尾)
要事先创建数据库 DB_NAME
,您可以使用 template0
(这将创建一个不包含任何站点本地添加的普通用户数据库)。
CREATE DATABASE dbname TEMPLATE template0;
结论
从 PostgreSQL 导出数据并再次导入以重建数据结构和填充数据库,是迁移数据、备份和恢复或准备复制的好方法。了解 pg_dump
和 psql
工具如何协同工作以完成此任务将有助于您跨越数据库的边界传输数据。