PostgreSQL 數據庫備份與還原


PostgreSQL 數據庫備份與還原



備份

PostgreSQL提供的一個工具 pg_dump, 邏輯導出數據,生成 sql 文件或其他格式文件,pg_dump 是一個客戶端工具,可以遠程或本地導出邏輯數據,恢復數據至導出時間點。

  • Usage:

    pg_dump [option]... [dbname]

    Tips: dbname 如果沒有提供數據庫名字, 那么使用 PGDATABASE 環境變量的數值.

  • Options

    • General options:(一般選項)

      -f, --file=FILENAME          輸出文件或目錄名
      -F, --format=c|d|t|p         輸出文件格式 ((定制, 目錄, tar) 明文 (默認值))
      -j, --jobs=NUM               執行多個並行任務進行備份轉儲工作
      -v, --verbose                詳細模式
      -V, --version                輸出版本信息,然后退出
      -Z, --compress=0-9           被壓縮格式的壓縮級別
      --lock-wait-timeout=TIMEOUT  在等待表鎖超時后操作失敗
      -?, --help                   顯示此幫助, 然后退出
      
    • Options controlling the output content:(控制輸出內容選項:)

      -a, --data-only              只轉儲數據,不包括模式
      -b, --blobs                  在轉儲中包括大對象
      -c, --clean                  在重新創建之前,先清除(刪除)數據庫對象
      -C, --create                 在轉儲中包括命令,以便創建數據庫
      -E, --encoding=ENCODING      轉儲以ENCODING形式編碼的數據
      -n, --schema=SCHEMA          只轉儲指定名稱的模式
      -N, --exclude-schema=SCHEMA  不轉儲已命名的模式
      -o, --oids                   在轉儲中包括 OID
      -O, --no-owner               在明文格式中, 忽略恢復對象所屬者
      
      -s, --schema-only            只轉儲模式, 不包括數據
      -S, --superuser=NAME         在明文格式中使用指定的超級用戶名
      -t, --table=TABLE            只轉儲指定名稱的表
      -T, --exclude-table=TABLE    不轉儲指定名稱的表
      -x, --no-privileges          不要轉儲權限 (grant/revoke)
      --binary-upgrade             只能由升級工具使用
      --column-inserts             以帶有列名的INSERT命令形式轉儲數據
      --disable-dollar-quoting     取消美元 (符號) 引號, 使用 SQL 標准引號
      --disable-triggers           在只恢復數據的過程中禁用觸發器
      --enable-row-security        啟用行安全性(只轉儲用戶能夠訪問的內容)
      --exclude-table-data=TABLE   不轉儲指定名稱的表中的數據
      --if-exists              當刪除對象時使用IF EXISTS
      --inserts                    以INSERT命令,而不是COPY命令的形式轉儲數據
      --no-security-labels         不轉儲安全標簽的分配
      --no-synchronized-snapshots  在並行工作集中不使用同步快照
      --no-tablespaces             不轉儲表空間分配信息
      --no-unlogged-table-data     不轉儲沒有日志的表數據
      --quote-all-identifiers      所有標識符加引號,即使不是關鍵字
      --section=SECTION            備份命名的節 (數據前, 數據, 及 數據后)
      --serializable-deferrable   等到備份可以無異常運行
      --snapshot=SNAPSHOT          為轉儲使用給定的快照
      --strict-names               要求每個表和/或schema包括模式以匹配至少一個實體
      --use-set-session-authorization
                                  使用 SESSION AUTHORIZATION 命令代替
                    ALTER OWNER 命令來設置所有權
      
    • Connection options:(聯接選項:)

      -d, --dbname=DBNAME       對數據庫 DBNAME備份
      -h, --host=主機名        數據庫服務器的主機名或套接字目錄
      -p, --port=端口號        數據庫服務器的端口號
      -U, --username=名字      以指定的數據庫用戶聯接
      -w, --no-password        永遠不提示輸入口令
      -W, --password           強制口令提示 (自動)
      --role=ROLENAME          在轉儲前運行SET ROLE
      
    • PG_DUMP 文檔

    • PG_DUMP 中文文檔


還原

  • Usage:

    psql [option]... [dbname [username]]

    pg_restore [option]... [file]

    Tips: 還原前需要創建 table 所需的 role

  • Options

    psql

    pg_restore

  • 基礎參數

    Option Value
    -h --host=HOSTNAME 數據庫服務器IP或主機名
    -p --port=PORT 數據庫端口號
    -U --username=NAME 用戶名
    -d --dbname=DBNAME 數據庫名
    -f --file=FILENAME 指定導出文件名(也可以使用< >
    -v --verbose 詳細模式(打印操作過程)
  • 常用參數

    Option Value
    -F --format=c|d|t|p 輸出文件格式 (定制, 目錄, tar, 明文 (默認值))
    -c --clean 在重新創建之前,先清除(刪除)數據庫對象
    -C --create 在轉儲中包括創庫命令,以便創建數據庫
    -E --encoding=ENCODING 轉儲以ENCODING形式編碼的數據
    -n --schema=SCHEMA 只轉儲指定名稱的模式
    -N --exclude-schema=SCHEMA 不轉儲指定名稱的模式
    -t --table=TABLE 只轉儲指定名稱的表
    -T --exclude-table=TABLE 不轉儲指定名稱的表
    -s --schema-only 只轉儲模式, 不包括數據(不導出數據)
    -Z --compress=0-9 指定壓縮格式的壓縮級別(0-9)

Tips

  • 操作遠程數據庫時必須加上 -h -p 參數;
  • 還原時,不指定數據庫默認還原到 postgres 庫(環境變量中的 PGDATABASE );
  • --if-exists 當刪除對象時使用IF EXISTS(配合 -c 參數使用)
  • -c 刪除原數據庫對象(備份文件中有刪除原庫的SQL)
  • -C 創建數據庫(備份文件中有創建原庫名的新數據庫的SQL)
    • -c 參數: 還原過程中會先刪除原數據庫;
    • 使用 -C 參數時,創建數據庫並備份所有模式。還原時無需指定數據庫,自動創建原庫的同名庫,並把所有模式還原其中;
    • 不使用 -C 參數時,只備份所有模式。還原時需要指定數據庫;* -C 在轉儲中創建數據庫的命令,還原時無需在導入之前先建數據庫;

栗子

備份數據庫

  • 常用備份

    pg_dump [-h host -p 5432] -U username [-c -C] -d db_name -f db_backup.sql [-v]

    pg_dump [-h host -p 5432] -U username [-c -C] -d db_name > db_backup.sql [-v]

  • 備份歸檔格式 -F c|d|t|p (默認為 p )

    pg_dump [-h host -p 5432] -U username [-c -C] -F c -d db_name -f db_backup.sql [-v]

  • 備份使用指定壓縮級別 -Z 0-9

    pg_dump [-h host -p 5432] -U username -F c -d db_name -f db_backup.sql [-v]

    Tips

    • 0 不壓縮, 1-9 壓縮級別;
    • -Fc 對於自定義歸檔格式,這會指定個體表數據段的壓縮,並且默認是進行中等級別的壓縮;
    • -Fp 對於純文本輸出,設置一個非零壓縮級別會導致整個輸出文件被壓縮,就好像它被gzip處理過一樣,但是默認是不壓縮;
    • -Ft tar 歸檔格式當前完全不支持壓縮;
  • 備份指定模式(schema) -n -N

    pg_dump [-h host -p 5432] -U username -d db_name -n schema_name [-n schema_name2]... -f db_schema.sql [-v]

    pg_dump [-h host -p 5432] -U username [-c -C] -d db_name -N schema_name [-N schema_name2]... -f db_exclude-schema.sql [-v]

  • 備份指定對象(table, view, etc) -t -T

    pg_dump [-h host -p 5432] -U username -d db_name [-n schema_name] -t tb_name [-t tb_name2]... -f db_table.sql [-v]

    pg_dump [-h host -p 5432] -U username -d db_name [-n schema_name] -T tb_name [-T tb_name2]... -f db_exclude-table.sql [-v]

    Tips: 導出表 username 為 表的所有者

  • 只備份模式(只備份所有模式,不備份數據) -s

    pg_dump [-h host -p 5432] -U username [-c -C] -d db_name -s -f db_only_schema_backup.sql [-v]


還原數據庫

  • 還原

    psql [-h host -p 5432] -U username -d db_name -f db_backup.sql

    psql [-h host -p 5432] -U username -d db_name < db_backup.sql

  • 恢復

    pg_restore [-h host -p 5432] -U username -d db_name -f db_backup.tar

    Tips

    • 錯誤日志: pg_restore: [archiver] input file appears to be a text format dump. Please use psql.
    • pg_resotre僅支持Fc/Ft格式的導出文件,Fp格式的文件是sql腳本,需要使用psql工具導入腳本數據
  • 修改所有表 OWNER (postgres用戶 除外)

    REASSIGN OWNED BY old_role [, ...] TO new_role


拓展



Via


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM