postgresql备份和恢复

实际工作中会对数据库进行备份和还原,备份主要有三种格式

.bak 即压缩的二进制

.sql 即明文存储

.tar 即tarball压缩格式

数据库备份分单数据库备份,使用 pg_dump 命令;所有数据库备份,使用 pg_dumpall 命令

pg_dump 常用选项

通用选项:

复制代码
-f, --file=FILENAME          输出文件名或目录名

-F, --format=c|d|t|p         输出文件格式(自定义、目录格式、tar包格式、纯文本)

-j, --jobs=NUM               使用多个并行作业进行转储

-v, --verbose                详细信息模式

详细模式:

复制代码
-b, --blobs                  在转储中包括大对象

-c, --clean                  在重新创建之前,先清除(删除)数据库对象

-C, --create                 在转储中包括命令,以便创建数据库(包括建库语句,无需在导入之前先建数据库)

-n, --schema=SCHEMA          只转储指定名称的模式

-N, --exclude-schema=SCHEMA  不转储已命名的模式

-t, --table=TABLE            只转储指定名称的表

--column-inserts             以带有列名的INSERT命令形式转储数据

控制输出内容选项:

复制代码
-d, --dbname=DBNAME          数据库名

-h, --host=HOSTNAME          数据库服务器的主机名或套接字目录

-p, --port=PORT              数据库服务器的端口号

-U, --username=NAME          以指定的数据库用户联接

-w, --no-password            永远不提示输入口令

-W, --password               强制口令提示 (自动)

--role=ROLENAME              在转储之前执行SET ROLE命令

备份某个database,备份结果以自定义压缩格式输出:

复制代码
pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f mydb.backup(自定义文件名) mydb(库名)

备份某个database,备份结果以SQL文本格式输出,输出结果要包含CREATE DATABASE 语句:

复制代码
pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb

pg_dumpall 常用选项

通用选项:

复制代码
-f, --file=FILENAME          输出文件名

-v, --verbose                详细信息模式

控制输出内容选项:

复制代码
-a, --data-only              仅转储数据,而不转储schema

-g, --globals-only           仅转储全局对象,而不转储数据库

-r, --reles-oly              仅转储角色,而不转储数据库和表空间

-s, --schema-only            仅转储shema,而不转储数据

--inserts                    以INSERT命令(而非COPY命令)的形式转储数据

连接选项:

复制代码
-d, --dbname=DBNAME          数据库名

-h, --host=HOSTNAME          数据库服务器的主机名或套接字目录

-l, --database=DBNAME        代替默认数据库

-p, --port=PORT              数据库服务器的端口号

-U, --username=NAME          以指定的数据库用户联接

-w, --no-password            永远不提示输入口令

-W, --password               强制口令提示 (自动)

--role=ROLENAME              在转储之前执行SET ROLE命令

pg_dumpall备份数据库

复制代码
pg_dumpall -U postgres -h localhost -p 5432 -v -f all.backup

pg_dumpall仅备份角色和表空间定义

复制代码
pg_dumpall -h localhost -U postgres --port=5432 -f myglobals.sql --globals-only

pg_dumpall仅需备份角色定义而无需备份表空间

复制代码
pg_dumpall -h localhost -U postgres --port=5432 -f myroles.sql --roles-only

PostgreSQL支持以下两种数据恢复方式:

使用psql来恢复pg_dump或pg_dumpall工具生产的sql文本格式的数据备份

使用pg_restore工具来恢复由pg_dump工具生产的自定义压缩格式、tar包格式或者目录格式备份

恢复一个SQL备份文件并忽略过程中可能发生的所有错误

复制代码
psql -U postgres -f myglobals.sql

恢复一个SQL备份文件,如遇错误则立即停止恢复

复制代码
psql -U postgres --set ON_ERROR_STOP=on -f myglobals.sql

将SQL文本中的数据恢复到某个指定的database

复制代码
psql -U postgres -d mydb(库名) -f select_objects.sql

使用pg_restore进行恢复

pg_restore 常用参数

通用选项:

复制代码
-d, --dbname=DBNAME          数据库名

-f, --file=FILENAME          输入文件名

-F, --format=c|d|t           输入文件格式(可以自动识别)

-v, --verbose                详细信息模式

详细模式:

复制代码
-a, --data-only              仅恢复数据,而不恢复schema

-C, --create                 创建目标数据库

-j, --jobs=NUM               使用多个并行作业进行恢复

-s, --schema-only            仅恢复shema,而不恢复数据

--section=SECTION            恢复命名部分(包括三个部分:pre-data,data以及post-data。\

                             data部分包含表记录数据、大对象数据以及序列的值;\

                             post-data部分包含索引、触发器、规则和约束的定义;\

                             pre-data部分包含除此外其他所有的对象定义)

控制输出内容选项:

复制代码
-h, --host=HOSTNAME          数据库服务器的主机名或套接字目录

-p, --port=PORT              数据库服务器的端口号

-U, --username=NAME          以指定的数据库用户联接

-w, --no-password            永远不提示输入口令

-W, --password               强制口令提示 (自动)

--role=ROLENAME              在转储之前执行SET ROLE命令

先创建目标数据库

复制代码
create databases mydb;

执行恢复

复制代码
pg_restore --dbname=mydb --jobs=4 --verbose mydb.backup

如果备份和恢复使用相同的database,则可以通过添加--create选项省去单独创建库的过程

复制代码
pg_restore --dbname=postgres --create --jobs=4 --verbose mydb.backup

--create选项,必须先连接数据库,才能创建数据库,所有指定--dbname=postgres
相关推荐
时光追逐者7 分钟前
一款免费、简单、高效的在线数据库设计工具
数据库·mysql·oracle·sql server
another heaven8 分钟前
【软考 2026 最新版 NoSQL 数据库全分类】
数据库·nosql
满天星83035779 分钟前
【MySQL】表的操作
linux·服务器·数据库·mysql
yashuk14 分钟前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
F1FJJ19 分钟前
VS Code 里管理 PostgreSQL,有哪些选择?主流扩展横向对比
网络·数据库·postgresql·容器
Bdygsl27 分钟前
MySQL(8)—— 事务
数据库·mysql
IvorySQL29 分钟前
直播回顾| PostgreSQL 18.3 x IvorySQL 5.3:开启 AI 数据库新纪元
数据库·postgresql·开源
编程之升级打怪33 分钟前
数据库的实时同步和异步同步
数据库
captain3761 小时前
MySQL增删改查
数据库·mysql
IvorySQL1 小时前
PostgreSQL 技术日报 (3月27日)|当 AI 开始自动创建数据库
数据库·postgresql·开源