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
相关推荐
夜泉_ly1 小时前
MySQL -安装与初识
数据库·mysql
qq_529835352 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New5 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6755 小时前
数据库基础1
数据库
我爱松子鱼5 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser6 小时前
【SQL】多表查询案例
数据库·sql
Galeoto6 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)7 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231117 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql