2.pg_dumpall 使用及示例


1.pg_dumpall 概述

1.1 pg_dumpall 介紹

https://www.postgresql.org/docs/14/app-pg-dumpall.html
用於將集群的所有PostgreSQL數據庫寫入( “轉儲” )到一個腳本文件中。該腳本文件包含可用作psql的輸入以恢復數據庫的SQL命令。它通過為集群中的每個數據庫調用pg_dump來做到這一點。pg_dumpall還轉儲所有數據庫共有的全局對象,即數據庫角色和表空間。(pg_dump不保存這些對象。)
由於pg_dumpall從所有數據庫中讀取表,您很可能必須以數據庫超級用戶身份連接才能生成完整的轉儲。此外,您需要超級用戶權限才能執行保存的腳本,以便允許添加角色和創建數據庫。

pg_dumpall需要多次連接到PostgreSQL服務器(每個數據庫一次)。如果您使用密碼身份驗證,它將每次都要求輸入密碼。~/.pgpass
在這種情況下,有一個文件很方便。有關詳細信息,請參閱第 34.16 節

1.2 優缺點

* 優點:*

  • 它轉儲全局 的東西——角色和表空間,這些不能被pg_dump轉儲。
  • 單個命令,你可以獲得整個集群的結果
  • 常用來備份全局對象而非全庫數據

* 缺點: *

  • 轉儲很大,因為它未壓縮
  • 轉儲非常慢,因為它是順序完成的,只有一個工作程序
  • 僅恢復部分轉儲很難
  • 生成psql腳本,pg_dumpall 只支持文本格式
  • 它在內部調用pg_dump

2.pg_dumpall 使用

#  pg_dump --help
用法:
  pg_dumpall [選項] ...

常規選項: 
  -f, --file=FILENAME         輸出文件名
  -v, --verbose               詳細模式
  -V, --version               輸出版本信息,然后退出
  --lock-wait-timeout=TIMEOUT 等待表鎖超時后失敗
  -?, --help                  顯示此幫助,然后退出

控制輸出內容的選項:
  -a, --data-only             只轉儲數據,不轉儲模式
  -c, --clean                 在重新創建之前清理(刪除)數據庫
  -E, --encoding=ENCODING     轉儲編碼 ENCODING 中的數據
  -g, --globals-only          只轉儲全局對象,不轉儲數據庫
  -O, --no-owner              跳過恢復對象所有權
  -r, --roles-only            只轉儲角色,不轉儲數據庫或表空間
  -s, --schema-only           只轉儲模式,不轉儲數據
  -S, --superuser=NAME        在轉儲中使用的超級用戶用戶名
  -t, --tablespaces-only      只轉儲表空間,不轉儲數據庫或角色
  -x, --no-privileges         不轉儲權限(授予/撤銷)
  --binary-upgrade            僅供升級實用程序使用
  --column-inserts            將數據轉儲為帶有列名的 INSERT 命令
  --disable-dollar-quoting    禁用美元報價,使用 SQL 標准報價
  --disable-triggers          在僅數據還原期間禁用觸發器
  --exclude-database=PATTERN  排除名稱與 PATTERN 匹配的數據庫
  --extra-float-digits=NUM    覆蓋 extra_float_digits 的默認設置
  --if-exists                 在刪除對象時使用 IF EXISTS
  --inserts                   將數據轉儲為 INSERT 命令,而不是 COPY
  --load-via-partition-root   通過根表加載分區
  --no-comments               不轉儲評論
  --no-publications           不轉儲出版物
  --no-role-passwords         不轉儲角色的密碼
  --no-security-labels        不轉儲安全標簽分配
  --no-subscriptions          不轉儲訂閱
  --no-sync                   不等待更改安全寫入磁盤
  --no-tablespaces            不轉儲表空間分配
  --no-unlogged-table-data    不轉儲未記錄的表數據
  --on-conflict-do-nothing    添加 ON CONFLICT DO NOTHING 到 INSERT 命令
  --quote-all-identifiers     引用所有標識符,即使不是關鍵字
  --rows-per-insert=NROWS     每個插入的行數;暗示 --inserts
  --use-set-session-authorization
                              使用 SET SESSION AUTHORIZATION 命令而不是 ALTER OWNER 命令來設置所有權

連接選項:
  -d, --dbname=CONNSTR        使用連接字符串連接
  -h, --host=HOSTNAME         數據庫服務器主機或套接字目錄
  -l, --database=DBNAME       替代默認數據庫
  -p, --port=PORT             數據庫服務器端口號
  -U, --username=NAME         以指定的數據庫用戶連接
  -w, --no-password           從不提示輸入密碼
  -W, --password              強制密碼提示(應該自動發生)
  --role=ROLENAME             在轉儲前做 SET ROLE

3. pg_dumpall 示例

3.1 導出所有數據庫

$ pg_dumpall >pg_all.sql

3.2導出所有Role 和Tablespace

pg_dumpall  -g >pg_globle.sql
pg_dumpall  -g   -h 127.0.0.1  > pg_globle.sql

#僅導出Role:
pg_dumpall -r >pg_roles.sql

# 僅導出Tablespace:
pg_dumpall -t >pg_tablespace.sql

3.3恢復

# 導入 :不存在的會導入,存在的不導入
psql -f pg_roles.sql
psql -f pg_roles.sql     -h 127.0.0.1      





免責聲明!

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



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