• 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      
    




  • 相关阅读:
    前端CSS部分知识整理
    css随笔记(持续更新)
    前端样式脚本本地化开发
    样式脚本本地化开发方法①【前端开发技巧】
    微信公众号吸粉简易新策略(自整理持续待更新)
    Wave
    无聊时百度了一下自己的名字。吓到我了
    Java实现 LeetCode 819 最常见的单词(暴力)
    Java实现 LeetCode 819 最常见的单词(暴力)
    Java实现 LeetCode 823 带因子的二叉树(DP)
  • 原文地址:https://www.cnblogs.com/cqdba/p/15916453.html
Copyright © 2020-2023  润新知