數據庫導入導出是最經常使用的功能之一。PostgreSQL的備份工具能夠使用pg_dump及pg_dumpall。能夠經過pg_dump --help獲取其使用方法。這裏不對其作過多介紹。主要介紹在使用pg_dump及恢復過程當中遇到的一個問題。sql
一、問題
使用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
二、導入導出的操做ide
pg_dump -U postgres -d yzs -Fa -c -C -f all.sql psql < all.sql
三、問題分析
1)經過-c導出時在重建database前先drop
2)經過-C導出時導出時導出create database語句
3)每次導入時,雖然庫中已有導入的表結構和部分數據,及先執行drop database語句清空,應該不會出現表已存在等錯誤,可是這種錯誤確實出現了。原來,在導入時,只要已有鏈接連着這個database,drop語句就不會執行成功,致使清理數據庫失敗,後續執行對應語句時會報已存在、重複鍵、多個主鍵等錯誤。
四、解決方法
1)pg_dump導出時,沒有選項使導出的語句中帶if not exists,不能使之不存在時再建立或插入。
2)保證沒有業務鏈接數據庫時才導入,或向一個乾淨的數據庫進行導入工具