空间数据库学习(二)—— 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:目标文件路径。
相关推荐
Elastic 中国社区官方博客14 分钟前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云1 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba1 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭1 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-2 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang2 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
geovindu3 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠3 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan4 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长4 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统