有時候為了從意外中還原或是在磁碟空間受限的情況下進行跨版本還原,會需要進行資料庫的備份,而這裡所說的備份跟單純將檔案複製到外部硬碟不大一樣,還原的時候會透過備份的資訊在目標主機上重新建立資料庫的內容。
https://www.postgresql.org/docs/current/app-pgdump.html
pg_dump可以對Postgres主機上特定的資料庫進行備份,然後備份整台伺服器上面的所有資料可以使用pg_dump all
pg_dump和pg_dumpall的差別,除了後者可以備份資料庫的完整環境(包括使用者/權限/table的格式及index等等),再來就是相較於pg_dumpall只能產生一連串重建資料庫環境的SQL指令腳本,pg_dump可以設定其他的檔案格式,像是為pg_restore還原最佳化的custom檔案格式,支援資料壓縮,以及在還原的時候選擇要還原的內容跟排序。
然後這兩套工具都可以下參數,像是--schema-only針對schema的部分做備份,還有--data-only單對資料做備份,因此可以用不同的方式來備份schema與資料本身。還原的時候用psql連上資料庫後開啟.sql的檔案執行裡面的腳本,或者用pg_restore/pgAdmin等工具開啟自定格式的備份檔就可以進行還原。
對想要備份的伺服器選擇"backup server"選項
輸入備份的檔案名稱及位置,可以看到提示,說明檔案會以PLAIN SQL來儲存
先設定做schema-only backup
備份出來的檔案可以用一般的文字編輯器打開做檢視,基本上就是一連串的SQL指令
再來針對單一資料庫選擇備份
選擇Custom自定壓縮格式進行備份
可以看到他底下使用的是pg_dump
重新建立空的Postgres資料庫,來試還原的部分
透過PSQL連線上去,讀取之前備份的script到資料庫上頭
透過類似之前備份操作的方式,在pgAdmin對database執行Restore選項,選擇只還原資料的部分
還原完成