空间数据库学习(二)—— 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:目标文件路径。
相关推荐
小陈工1 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花6 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸6 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain6 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希7 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神7 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员7 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java7 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿7 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴7 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存