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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-02-20 原生mysql-迁移到TDSQL分布式 (cvs方式)