PostgreSQL逻辑备份恢复——pg_dump导出及psql导入案例

  

数据库导入导出是最常用的功能之一.PostgreSQL的备份工具可以使用pg_dump及pg_dumpall。可以通过pg_dump——帮助获取其使用方法。这里不对其做过多介绍。主要介绍在使用pg_dump及恢复过程中遇到的一个问题。

  

1,问题
使用pg_dump - c导出后,通过psql导入时报下面的错误:

  
 <代码>错误:关系“t1”已经存在
  错误:重复键值违反唯一约束“t1_pkey”
  错误:多个主键表t1”不允许 
  

2,导入导出的操作

  
 <代码> pg_dump - u postgres - d yz fa - c - c - f all.sql
  psql & lt;all.sql  
  

3,问题分析
1)通过- c导出时在重建数据库前先下降
2)通过- c导出时导出时导出创建数据库语句
3)每次导入时,虽然库中已有导入的表结构和部分数据,及先执行删除数据库语句清空,应该不会出现表已存在等错误,但是这种错误确实出现了。原来,在导入时,只要已有连接连着这个数据库,减少语句就不会执行成功,导致清理数据库失败,后续执行对应语句时会报已存在,重复键,多个主键等错误。
4,解决方法
1) pg_dump导出时,没有选项使导出的语句中带如果不存在,不能使之不存在时再创建或插入。
2)保证没有业务连接数据库时才导入,或向一个干净的数据库进行导入

PostgreSQL逻辑备份恢复——pg_dump导出及psql导入案例