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
相关推荐
极限实验室12 分钟前
Easysearch 迁移数据之 Reindex From Remote
数据库
朴拙数科12 分钟前
基于LangChain与Neo4j构建企业关系图谱的金融风控实施方案,结合工商数据、供应链记录及舆情数据,实现隐性关联识别与动态风险评估
数据库·langchain·neo4j
小李学不完1 小时前
Oracle--SQL事务操作与管理流程
数据库
qq_441996051 小时前
为何 RAG 向量存储应优先考虑 PostgreSQL + pgvector 而非 MySQL?
数据库·mysql·postgresql
Ivan陈哈哈1 小时前
Redis是单线程的,如何提高多核CPU的利用率?
数据库·redis·缓存
小光学长2 小时前
基于vue框架的电信用户业务管理系统的设计与实现8ly70(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
程序员不想YY啊2 小时前
MySQL元数据库完全指南:探秘数据背后的数据
数据库·mysql·oracle
数据最前线2 小时前
Doris表设计与分区策略:让海量数据管理更高效
数据库
时光追逐者2 小时前
MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
数据库·学习·mongodb
头顶秃成一缕光3 小时前
Redis的主从模式和哨兵模式
数据库·redis·缓存