首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL-逻辑备份和还原

PostgreSQL-逻辑备份和还原

作者头像
运维小路
发布2026-01-26 12:34:05
发布2026-01-26 12:34:05
1580
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL(本章节)

MongoDB

Redis

Etcd

前面我们介绍了MySQL的逻辑备份,今天这个小节我们介绍PostgreSQL的逻辑备份,他比较适合中小数据库。

一.逻辑备份

1.1 pg_dump - 单数据库备份

这里的用户需要有数据库的连接(connect)和读取(select)的权限或者使用超级管理员用户。

代码语言:javascript
复制
# 基本语法
pg_dump [选项] 数据库名 > 备份文件.sql

# 常用示例
# 备份整个数据库到SQL文件
pg_dump -h localhost -p 5432 -U username -d database_name > backup.sql

# 备份为自定义格式(压缩,支持选择性恢复)
pg_dump -h localhost -U username -d database_name -Fc > backup.dump

# 备份为目录格式(并行备份/恢复)
pg_dump -h localhost -U username -d database_name -Fd -f backup_dir/

# 只备份数据(不包含表结构)
pg_dump -h localhost -U username -d database_name -a > data_only.sql

# 只备份表结构
pg_dump -h localhost -U username -d database_name -s > schema_only.sql

# 备份特定表
pg_dump -h localhost -U username -d database_name -t table1 -t table2 > tables_backup.sql

1.2 pg_dumpall - 全集群备份

这个就是和MySQL不一样的地方,MySQL是一个命令无论是备份单库还是全部库都是一个命令,PostgrSQL则是不同的命令。

代码语言:javascript
复制
# 备份所有数据库和全局对象
pg_dumpall -h localhost -U username > all_databases.sql

# 只备份全局对象(角色、表空间等)
pg_dumpall -h localhost -U username --globals-only > globals.sql

# 只备份角色
pg_dumpall -h localhost -U username --roles-only > roles.sql

二.逻辑还原

2.1 psql - 还原SQL格式备份

这个还原的和MySQL还原不一样的地方是MySQL会自动覆盖旧有数据,PostgreSQL则不会。

代码语言:javascript
复制
# 还原整个数据库
psql -h localhost -U username -d database_name -f backup.sql

# 还原到新数据库
createdb new_database
psql -h localhost -U username -d new_database -f backup.sql

# 在还原前先清理目标数据库
psql -h localhost -U username -d database_name -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
psql -h localhost -U username -d database_name -f backup.sql

2.2 pg_restore - 还原自定义/目录格式

代码语言:javascript
复制
# 还原自定义格式备份
pg_restore -h localhost -U username -d database_name backup.dump

# 还原到新数据库
createdb new_database
pg_restore -h localhost -U username -d new_database backup.dump

# 并行还原(目录格式)
pg_restore -h localhost -U username -d database_name -j 4 backup_dir/

# 只还原表结构
pg_restore -h localhost -U username -d database_name -s backup.dump

# 只还原数据
pg_restore -h localhost -U username -d database_name -a backup.dump

# 交互式还原(列出内容并选择)
pg_restore -l backup.dump > list.txt
# 编辑list.txt,注释掉不需要恢复的对象
pg_restore -h localhost -U username -d database_name -L list.txt backup.dump
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 一.逻辑备份
    • 1.1 pg_dump - 单数据库备份
    • 这里的用户需要有数据库的连接(connect)和读取(select)的权限或者使用超级管理员用户。
    • 1.2 pg_dumpall - 全集群备份
    • 这个就是和MySQL不一样的地方,MySQL是一个命令无论是备份单库还是全部库都是一个命令,PostgrSQL则是不同的命令。
    • 2.1 psql - 还原SQL格式备份
    • 这个还原的和MySQL还原不一样的地方是MySQL会自动覆盖旧有数据,PostgreSQL则不会。
    • 2.2 pg_restore - 还原自定义/目录格式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档