CodeGym /課程 /SQL SELF /pg_dump 建立基本備份

pg_dump 建立基本備份

SQL SELF
等級 43, 課堂 2
開放

pg_dump 是 PostgreSQL 提供的 command line 工具,可以把資料庫匯出成備份檔。這個檔案可以只包含資料庫結構、資料,或是兩者都有。

pg_dump 最大的好處就是可以讓你在不同伺服器間搬資料、當資料庫掛掉時還原,或是單純做長期存檔。要注意,這工具比較適合做邏輯備份(用 SQL 查詢),不是直接複製資料庫檔案那種物理備份。

pg_dump 指令的基本語法

要用 pg_dump 備份,只要在 terminal 下這行指令:

pg_dump -U username -d database_name -f backup_file.sql

來拆解一下這個指令的組成:

  • -U username — 指定你要用哪個 PostgreSQL 使用者連線資料庫。
  • -d database_name — 指定你要備份哪個資料庫。
  • -f backup_file.sql — 指定備份檔要存在哪裡,可以是完整路徑或相對路徑。

舉例:假設你有個資料庫叫 university,想把它備份成 university_backup.sql,指令會像這樣:

pg_dump -U postgres -d university -f university_backup.sql

這時 PostgreSQL 會問你 postgres 這個使用者的密碼,才會讓你存取資料。

小撇步: 如果你是在本機伺服器操作,不想每次都輸入密碼,可以設定 .pgpass 檔。去看一下 PostgreSQL 官方文件,有更詳細的說明。

參數與用法

pg_dump 這工具超彈性,可以用很多不同設定來備份:

  1. 只備份資料庫結構

如果你只想存結構(比如要在新伺服器重建),用 --schema-only 這個 flag。範例:

pg_dump -U postgres -d university --schema-only -f university_schema.sql

這樣會產生一個 SQL script,裡面只有 CREATE TABLECREATE INDEX 等等,沒有資料。

  1. 只備份資料

有時你只想存資料,不要結構,就用 --data-only

pg_dump -U postgres -d university --data-only -f university_data.sql

這個檔案會有 INSERT INTO 指令,可以還原你的資料。

  1. 壓縮備份檔

如果你的資料庫很大,備份檔可能會很肥。想省空間就用 --compress 參數:

pg_dump -U postgres -d university -f university_backup.sql --compress=6

壓縮等級可以設 0(不壓縮)到 9(最強壓縮)。但壓越多,備份會花比較久。

  1. 匯出成 binary 格式

如果你想要還原速度快一點,可以把備份存成 binary 格式,不要 SQL script:

pg_dump -U postgres -d university -Fc -f university_backup.dump

-Fc 這個 key 代表 Custom 格式,可以用 pg_restore 來還原。

備份範例

完整備份資料庫

假設你有個資料庫叫 company,想要備份結構跟資料:

pg_dump -U postgres -d company -f company_backup.sql

只備份一張表

如果你只想存某一張表,用 -t 參數:

pg_dump -U postgres -d company -t employees -f employees_backup.sql

這個檔案只會有 employees 這張表的結構跟資料。

備份多張表

要備份多張表,就多加幾個 -t

pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql

壓縮備份

想省空間就用 --compress,或直接存成壓縮格式:

pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump

實用建議

檢查備份檔大小。 如果備份檔太小,可能有問題。加上 --verbose 參數,可以看到更多備份過程細節。

自動化流程。cronpg_cron 來定期自動備份。記得要做好舊備份的輪替,不然硬碟會爆。

檢查備份正不正確。 把備份還原到測試伺服器,確認沒問題。

你可能會遇到的錯誤

認證錯誤。 如果你沒填對使用者或忘記密碼,pg_dump 會報錯。記得設好 .pgpass 讓它自動登入。

連線錯誤。 如果 PostgreSQL server 沒開,或資料庫名字打錯,工具就備不了份。檢查一下資料庫名稱跟 server 狀態。

權限問題。 你執行 pg_dump 的使用者要有讀取結構和資料的權限。能用 admin 角色就用 admin。

2
任務
SQL SELF, 等級 43, 課堂 2
上鎖
只備份資料庫結構
只備份資料庫結構
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION