postgresql中的 pg_dump和pg_restore

一、postgresql中的 pg_dump和pg_restore

使用 pg_dumppg_restore 对数据进行备份和还原。 其中pg_restore 恢复还原采用的是创建语句

1.1 pg_dump和pg_restore

  1. 数据库备份:pg_dump
  2. 数据库恢复:pg_restore

使用pg_dump的自定义转储格式。. 如果PostgreSQL所在的系统上安装了zlib压缩库,自定义转储格式将在写出数据到输出文件时对其压缩。这将产生和使用gzip时差不多大小的转储文件,但是这种方式的一个优势是其中的表可以被有选择地恢复。

下面的命令使用自定义转储格式来转储一个数据库:
pg_dump -Fc dbname > filename
自定义格式的转储不是psql的脚本,只能通过pg_restore恢复,例如:
pg_restore -d dbname filename


1.2 环境准备

  1. centos7
  2. postgresql10

1.3 使用 pg_dump和pg_restore 备份和还原

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

Ident authentication failed for user “postgres” 注意IP 不要使用 localhost, 使用真实的IP,否则需要修改配置文件来支持。

pg_dump -h 18*.**.136.109  -p 5432 -U postgres -F c -b -v -f    /home/soft/leetcode  leetcode

# 输入IP 端口、用户名。 输入的位置: /home/soft/leetcode ;dump的数据库为 leetcode
# 需要修改这几个不同的位置即可。

postgresql中的 pg_dump和pg_restore

在做pg_dump 时发现版本不一致,出现下面错误,现在需要设置版本顺序:

pg_dump: server version: 10.8; pg_dump version: 9.2.24
pg_dump: aborting because of server version mismatch
postgresql中的 pg_dump和pg_restore
sudo find / -name pg_dump
sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump
参考:https://askubuntu.com/questions/646603/how-do-i-solve-a-server-version-mismatch-with-pg-dump-when-i-need-both-postgre


  • 恢复数据库 pg_restore

因为是同一个数据库:为了演示,先删除leetcode、在创建leetcode。 然后使用pg_restore 进行恢复。

-- drop database leetcode;
-- create database leetcode;

数据库恢复(从那个文件恢复到那个数据库),恢复语句

因为之前不小心安装了不同版本的插件,导致了出现下面错误,跟pg_dump一样,需要调整默认的pg_restore顺序

pg_restore: [archiver] unsupported version (1.13) in file header
postgresql中的 pg_dump和pg_restore
sudo find / -name pg_restore
sudo ln -sfn /usr/pgsql-10/bin/pg_restore /usr/bin/pg_restore

 pg_restore -h 18*.**.136.109 -p 5432 -U postgres -W -d leetcode  -v /home/soft/leetcode

postgresql中的 pg_dump和pg_restore

看到上述界面,基本上就完成了整个过程。


小结

通过上诉两个步骤就完成了数据库的备份和还原。需要注意:在使用pg_restore 还原时,一定要注意,其SQL脚本是创建脚本,不是更新脚本,需要考究是否适合你的使用场景。另外还需要注意数据库名是否存在