postgresql版本10.1 postgis版本2.5.3 pgadmin4版本2.0
自己使用過的幾種方式:
1.用pgadmin4備份(一個數據庫一個數據庫的備份)
在需要備份的數據庫名稱上面右鍵=》選擇backup=》彈出框中設置備份的選項依次是備份文件保存路徑(如:C:\Test\1.backup)、備份的格式(普通還是壓縮之類的,我是選的默認的custom)、第三個選項Compression ratio暫時不知道是什么保持默認什么都不填、Encoding我選擇的是utf8因為建庫的時候我也是選擇的使用utf8來建庫、最后兩個選項job和role我都沒填保持默認空,然后確認進行備份=》右下角會彈出備份進行情況信息sucessful...
還原的時候首先要新建一個同名的數據庫=》數據庫名稱上面右鍵=》選擇restore=》彈出框的設置:format默認,filename選擇上面備份的文件,job默認空,role默認空=》開始備份即可,但是我的最后完成情況是failed,然后打開備份的數據庫發現里面的表都是有的數據也是完整的,看起來是完全備份成功了的。我后來才發現這個failed導致我的表的主鍵序列都沒有得到備份,所以在使用自增主鍵的時候有問題會重新從1開始自增。最后我是用語句再去為表建立的主鍵序列並設置相應的起始數值為當前主鍵+1,比較麻煩。
2.用navicat premiun版本12.0.18
先用navicat連接上我們的備份數據庫和目標數據庫,這里用navicat自帶的數據傳輸工具將備份數據庫中的表直接復制到目標數據庫的時候它有的表會報錯:xxxsep不存在之類的。應該也就是表主鍵對應的序列不存在的問題導致不能這樣備份。然后我先將表轉存為sql文件后發現報錯的表在創建主鍵的時候都有一句"Id" int8 NOT NULL DEFAULT nextval('"xxxxx_seq"'::regclass)這種格式的話,應該就是問題的關鍵因為不存在這個指定的xxxxx_seq序列。我把這句語句改成了"Id" serial,再把改完后的sql文件放到目標數據庫下去執行,成功生成了表和里面的數據。
3.直接備份postgresql的data文件夾
這種方式就是將數據庫安裝目錄下的data文件夾直接全部拷貝到另外一個安裝的postgresql數據庫對應的目錄下取代原有的data文件夾,會備份原數據庫所有的信息。首先拷貝備份數據庫安裝目錄下的data文件夾(需要先停掉數據庫服務)=》然后停掉目標數據庫的服務,將目標數據庫的data文件夾刪除或者重命名=》拷貝備份數據庫的data文件夾到目標數據庫目錄相應的位置取代原有的data文件夾=》移除目標postgres服務,在CMD中輸入,cd "C:\Program Files\PostgreSQL\10\bin" 執行目錄跳轉到Postgre安裝目錄下的bin目錄下,再輸入 pg_ctl unregister -N "postgresql-10"(這里也是PostgerSql的服務名稱)=》重新創建postgres服務,cmd的執行目錄確保是"C:\Program Files\PostgreSQL\10\bin" 輸入pg_ctl register -N "postgres" -D "C:\Program Files\PostgreSQL\10\data"=》啟動服務,cmd 輸入 net start postgres=》啟動完成后就可以連接數據庫測試了