PostgreSQL邏輯備份恢復--pg_dump匯出及psql匯入案例

yzs87發表於2019-03-17

資料庫匯入匯出是最常用的功能之一。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)保證沒有業務連線資料庫時才匯入,或向一個乾淨的資料庫進行匯入


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2638604/,如需轉載,請註明出處,否則將追究法律責任。

相關文章