文章同步更新于我的个人博客:松果猿的博客,欢迎访问获取更多技术分享。
同时,您也可以关注我的微信公众号:松果猿的代码工坊,获取最新文章推送和编程技巧。
数据备份:多种方式导出数据
一、使用 pg_dump
导出表结构和数据
pg_dump
是 PostgreSQL 提供的备份工具,可以用来导出表的结构和数据。它支持多种格式,包括 SQL 文件、自定义格式文件和 tar 格式文件
(一)导出表结构和数据到 SQL 文件
bash
pg_dump -h <hostname> -U <username> -d <database_name> -t <table_name> -f <backup_file>
-h <hostname>
:指定数据库服务器的主机名。-U <username>
:指定连接数据库的用户名。-d <database_name>
:指定数据库名称。-t <table_name>
:指定要导出的表名。-f <backup_file>
:将导出的内容保存到<backup_file>
文件中。
(二)导出表结构和数据到自定义格式文件
自定义格式是一种高效、可压缩的备份格式,支持快速恢复和选择性恢复。
bash
pg_dump -h <hostname> -U <username> -d <database_name> -t <table_name> -F c -f <backup_file>
-F c
:指定导出格式为自定义格式(c
)。-f <backup_file>
:将导出的内容保存到<backup_file>
文件中。
(三)导出表结构和数据到 tar 格式文件
tar 格式是一种标准的归档格式,支持选择性恢复,但不支持内部压缩。
bash
pg_dump -h <hostname> -U <username> -d <database_name> -t <table_name> -F t -f <backup_file>
二、仅导出数据
(一)导出数据到 SQL 文件
如果只需要导出表的数据,可以使用 pg_dump
将数据导出为 SQL 文件,其中包含 INSERT
语句。
bash
pg_dump -h <hostname> -U <username> -d <database_name> -t <table_name> --data-only --column-inserts -f <backup_file>
--data-only
:仅导出数据,不导出表结构。--column-inserts
:将数据导出为INSERT
语句的形式,方便后续导入。-f <backup_file>
:将导出的内容保存到<backup_file>
文件中。
(二)导出数据到 CSV 文件
如果需要将数据导出为纯 CSV 格式,可以使用以下命令:
bash
psql -h <hostname> -U <username> -d <database_name> -c "COPY <table_name> TO STDOUT WITH CSV HEADER" > table_data.csv
COPY <table_name> TO STDOUT WITH CSV HEADER
:将表数据导出为 CSV 格式,并包含列名作为标题。> table_data.csv
:将导出的内容保存到table_data.csv
文件中。
三、仅导出表结构
如果只需要导出表的结构,可以使用 pg_dump
的 --schema-only
选项。
bash
pg_dump -h <hostname> -U <username> -d <database_name> -t <table_name> --schema-only -f <backup_file>
--schema-only
:仅导出表的结构,不导出数据。-f <backup_file>
:将导出的内容保存到<backup_file>
文件中。
四、使用图形化工具导出
可以使用 pgAdmin
或其他 PostgreSQL 管理工具来导出表的结构和数据。
示例:使用 pgAdmin 导出表
- 打开 pgAdmin,连接到目标数据库。
- 找到要导出的表,右键单击选择"备份"。
- 在备份对话框中,选择导出的格式(如 SQL 或自定义格式),指定导出文件的路径和文件名。
- 点击"备份"按钮开始导出。
五、导出整个数据库(包含特定表)
如果需要导出整个数据库,但只想包含特定的表,可以使用 pg_dump
的 -T
选项来排除某些表。
(一)排除特定表导出整个数据库
bash
pg_dump -h <hostname> -U <username> -d <database_name> -T <excluded_table1> -T <excluded_table2> -f <backup_file>
-T <excluded_table1>
:排除指定的表。-T <excluded_table2>
:排除另一个表。-f <backup_file>
:将导出的内容保存到<backup_file>
文件中。
(二)仅导出特定表
如果只想导出特定的表,可以使用 -t
选项:
bash
pg_dump -h <hostname> -U <username> -d <database_name> -t <table_name1> -t <table_name2> -f <backup_file>
-t <table_name1>
:指定要导出的表。-t <table_name2>
:指定另一个要导出的表。-f <backup_file>
:将导出的内容保存到<backup_file>
文件中。
数据恢复:多种方式导入数据
一、使用 pg_restore
恢复数据库
pg_restore
是 PostgreSQL 提供的用于恢复由 pg_dump
创建的备份文件的工具。它支持从多种格式(如自定义格式、tar 格式)恢复数据。
(一)从自定义格式备份文件恢复
bash
pg_restore -U <username> -d <database_name> -F c -f <backup_file>
-F c
:指定备份文件为自定义格式。-f <backup_file>
:指定备份文件路径。
(二)从 tar 格式备份文件恢复
bash
pg_restore -U <username> -d <database_name> -F t -f <backup_file>
-F t
:指定备份文件为 tar 格式。-f <backup_file>
:指定备份文件路径。
(三)仅恢复数据或结构
- 仅恢复数据:
bash
pg_restore -U <username> -d <database_name> --data-only <backup_file>
- 仅恢复表结构:
bash
pg_restore -U <username> -d <database_name> --schema-only <backup_file>
二、使用 psql
导入 SQL 文件
如果有一个 SQL 格式的备份文件,可以使用 psql
命令将其导入到目标数据库中。
bash
psql -h <hostname> -U <username> -d <database_name> -f <sql_file>
-h <hostname>
:指定目标数据库服务器的主机名。-U <username>
:指定连接目标数据库的用户名。-d <database_name>
:指定目标数据库名称。-f <sql_file>
:指定要导入的 SQL 文件路径。
三、使用 COPY
命令导入数据
COPY
是 PostgreSQL 中用于在表和文件之间进行数据导入导出的命令。
(一)从文件导入数据到表
sql
COPY <table_name> FROM '/path/to/file.csv' DELIMITER ',' CSV HEADER;
/path/to/file.csv
:数据文件路径。DELIMITER ','
:指定字段分隔符为逗号。CSV HEADER
:指定文件包含列标题。
(二)从表导出数据到文件
sql
COPY <table_name> TO '/path/to/file.csv' DELIMITER ',' CSV HEADER;
/path/to/file.csv
:目标文件路径。