空间数据库学习(二)—— 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:目标文件路径。
相关推荐
言德斐5 小时前
SQL性能优化的思路及策略
数据库·sql·性能优化
码界奇点6 小时前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
Allan_20256 小时前
数据库学习
数据库·学习
fen_fen6 小时前
人大金仓数据库kingbase8创建表示例
数据库·oracle
一勺菠萝丶6 小时前
「您的连接不是私密连接」详解:为什么 HTTPS 证书会报错,以及如何正确配置子域名证书
数据库·网络协议·https
²º²²এ松6 小时前
蓝牙低功耗(BLE)通信的中心设备/外围设备(连接角色)、主机/从机(时序角色)、客户端/服务器(数据交互角色)的理解
运维·服务器·数据库
百锦再7 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
数据库知识分享者小北7 小时前
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
数据库·人工智能·云原生
_Johnny_7 小时前
Redis 升级操作指南:单机与主从模式
数据库·redis·缓存
源力祁老师8 小时前
ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
xml·数据库·sql