空间数据库学习(二)—— 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:目标文件路径。
相关推荐
m0_466525292 小时前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
爱学习的阿磊3 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha3 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞3 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean3 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024633 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦3 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99993 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7654 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码4 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql