手机版
你好,游客 登录 注册
背景:
阅读新闻

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

[日期:2019-04-17] 来源:Linux社区  作者:yzs87 [字体: ]

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

1、问题 

使用pg_dump -c导出后,通过psql导入时报下面的错误:
ERROR:  relation "t1" already exists
ERROR:  duplicate key value violates unique constraint "t1_pkey"
ERROR:  multiple primary keys for table "t1" are not allowed

2、导入导出的操作 
pg_dump -U postgres -d yzs -Fa -c -C -f all.sql
psql < all.sql

3、问题分析 

1)通过-c导出时在重建database前先drop

2)通过-C导出时导出时导出create database语句

3)每次导入时,虽然库中已有导入的表结构和部分数据,及先执行drop database语句清空,应该不会出现表已存在等错误,但是这种错误确实出现了。原来,在导入时,只要已有连接连着这个database,drop语句就不会执行成功,导致清理数据库失败,后续执行对应语句时会报已存在、重复键、多个主键等错误。

4、解决方法 

1)pg_dump导出时,没有选项使导出的语句中带if not exists,不能使之不存在时再创建或插入。

2)保证没有业务连接数据库时才导入,或向一个干净的数据库进行导入

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2019-04/158143.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款