PostgreSQL备份工具pg_dump和pg_dumpall

本文详细介绍了如何使用PostgreSQL的pg_dump和pg_dumpall工具进行数据库的逻辑备份。pg_dump用于单个数据库或特定表的备份,而pg_dumpall则针对整个数据库集群。通过不同参数的设置,可以实现数据和结构的单独备份,以及全库备份。在备份过程中,还提到了因字符编码问题导致的错误及其解决方案。
摘要由CSDN通过智能技术生成

PostgreSQL使用 pg_dump 和 pg_dumpall 进行数据库的逻辑备份,pg_dumpall 是对整个数据库集群进行备份,pg_dump 可以选择一个数据库或者部分表进行备份。

pg_dump 将表结构及数据以SQL语句的形式导出到文件中,恢复数据时,将导出的文件作为输入,执行其中的SQL语句,即可恢复数据。

pg_dump 能够对正在使用的PostgreSQL数据库进行备份,并且不影响正常业务的读写。

一、前期准备

1、数据库版本:PostgreSQL 12.0

image

2、创建文件夹,并赋予权限

mkdir /home/haolb/pgbak
chown –R postgres /home/haolb/pgbak

3、Liunx系统正常切换到postgres用户

[root@localhost haolb]# su postgres
bash-4.2$

二、pg_dump 常用示例

1 导出单表数据
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql -t oyz_menu --inserts > oyz_menu.sql

2 导出多个表数据
pg_dump -h 127.0.0.1 -U postgres -p 5432 -W oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql -t oyz_menu -t sys_user --inserts > oyz_menu_user.sql


3 导出整个数据库
pg_dump -h 127.0.0.1 -U postgres -p 5432 -E UTF8 -W oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql --inserts > bak.sql


4 只导出表结构,不导出数据
pg_dump -h 127.0.0.1 -U postgres -p 5432 -E UTF8 -W oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql -s > tableDMLbak.sql

5 只导出数据,不导出表结构
pg_dump -h 127.0.0.1 -U postgres -p 5432 -E UTF8 -W oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql -a > tableDMLbak.sql

三、pg_dump常用参数

-h host,指定数据库主机名,或者IP
-p port,指定端口号
-U user,指定连接使用的用户名
-W,按提示输入密码
dbname,指定连接的数据库名称,实际上也是要备份的数据库名称。
-a,–data-only,只导出数据,不导出表结构
-c,–clean,是否生成清理该数据库对象的语句,比如drop table
-C,–create,是否输出一条创建数据库语句
-E, --encoding=ENCODING,导出数据编码格式(UTF8、GBK)
-f file,–file=file,输出到指定文件中
-n schema,–schema=schema,只转存匹配schema的模式内容
-N schema,–exclude-schema=schema,不转存匹配schema的模式内容
-O,–no-owner,不设置导出对象的所有权
-s,–schema-only,只导致对象定义模式,不导出数据
-t table,–table=table,只转存匹配到的表,视图,序列,可以使用多个-t匹配多个表
-T table,–exclude-table=table,不转存匹配到的表。
--inserts,使用insert命令形式导出数据,这种方式比默认的copy方式慢很多,但是可用于将数据导入到非PostgreSQL数据库。
--column-inserts,导出的数据,有显式列名

四、pg_dumpall

相对于pg_dump只能备份单个库,pg_dumpall可以备份整个postgresql实例中所有的数据,包括角色和表空间定义。

示例如下:

pg_dumpall -h 127.0.0.1 -U admin -p 5432 –W --inserts > bak.sql

五、报错解决方法

bash-4.2$ pg_dump -h 127.0.0.1 -U postgres -p 5432 -W oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql --inserts > bak.sql
Password:
pg_dump: error: query failed: ERROR:  character with byte sequence 0xc2 0xa0 in encoding "UTF8" has no equivalent in encoding "GBK"
pg_dump: error: query was: FETCH 100 FROM _pg_dump_cursor
You have mail in /var/spool/mail/root
bash-4.2$

在备份正个库时报以上错误,说明字符编码有问题,导出时加上 –E参数。

pg_dump -E UTF8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值