溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL邏輯備份恢復(fù)--pg_dump導(dǎo)出及psql導(dǎo)入案例

發(fā)布時(shí)間:2020-07-14 19:10:08 來源:網(wǎng)絡(luò) 閱讀:1445 作者:yzs的專欄 欄目:數(shù)據(jù)庫

數(shù)據(jù)庫導(dǎo)入導(dǎo)出是最常用的功能之一。PostgreSQL的備份工具可以使用pg_dump及pg_dumpall??梢酝ㄟ^pg_dump --help獲取其使用方法。這里不對其做過多介紹。主要介紹在使用pg_dump及恢復(fù)過程中遇到的一個(gè)問題。

1、問題
使用pg_dump -c導(dǎo)出后,通過psql導(dǎo)入時(shí)報(bào)下面的錯(cuò)誤:

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、導(dǎo)入導(dǎo)出的操作

pg_dump -U postgres -d yzs -Fa -c -C -f all.sql
psql < all.sql

3、問題分析
1)通過-c導(dǎo)出時(shí)在重建database前先drop
2)通過-C導(dǎo)出時(shí)導(dǎo)出時(shí)導(dǎo)出create database語句
3)每次導(dǎo)入時(shí),雖然庫中已有導(dǎo)入的表結(jié)構(gòu)和部分?jǐn)?shù)據(jù),及先執(zhí)行drop database語句清空,應(yīng)該不會(huì)出現(xiàn)表已存在等錯(cuò)誤,但是這種錯(cuò)誤確實(shí)出現(xiàn)了。原來,在導(dǎo)入時(shí),只要已有連接連著這個(gè)database,drop語句就不會(huì)執(zhí)行成功,導(dǎo)致清理數(shù)據(jù)庫失敗,后續(xù)執(zhí)行對應(yīng)語句時(shí)會(huì)報(bào)已存在、重復(fù)鍵、多個(gè)主鍵等錯(cuò)誤。
4、解決方法
1)pg_dump導(dǎo)出時(shí),沒有選項(xiàng)使導(dǎo)出的語句中帶if not exists,不能使之不存在時(shí)再創(chuàng)建或插入。
2)保證沒有業(yè)務(wù)連接數(shù)據(jù)庫時(shí)才導(dǎo)入,或向一個(gè)干凈的數(shù)據(jù)庫進(jìn)行導(dǎo)入

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI