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      




posted @ 2022-02-20 20:31  www.cqdba.cn  阅读(3783)  评论(1编辑  收藏  举报