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
相关推荐
小技与小术1 小时前
数据库表设计范式
数据库·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer1 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体1 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀2 小时前
MySQL中的索引
数据库·mysql
a_安徒生2 小时前
linux安装TDengine
linux·数据库·tdengine
程序员学习随笔2 小时前
PostgreSQL技术内幕19:逻辑备份工具pg_dump、pg_dumpall
数据库·postgresql