空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复

文章同步更新于我的个人博客:松果猿的博客,欢迎访问获取更多技术分享。

同时,您也可以关注我的微信公众号:松果猿的代码工坊,获取最新文章推送和编程技巧。

数据备份:多种方式导出数据

一、使用 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 导出表

  1. 打开 pgAdmin,连接到目标数据库。
  2. 找到要导出的表,右键单击选择"备份"。
  1. 在备份对话框中,选择导出的格式(如 SQL 或自定义格式),指定导出文件的路径和文件名。
  1. 点击"备份"按钮开始导出。

五、导出整个数据库(包含特定表)

如果需要导出整个数据库,但只想包含特定的表,可以使用 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:目标文件路径。
相关推荐
数据智能老司机16 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机16 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
无名之逆17 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010117 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机17 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy17 小时前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖17 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
Three~stone19 小时前
MySQL学习集--DDL
数据库·sql·学习
Qi妙代码19 小时前
MYSQL基础
数据库·mysql·oracle