pg_dump实例详解

2023-11-11

本文转自:http://blog.chinaunix.net/uid-354915-id-3504632.html

一、pg_dump的用法:
数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump,而PostgreSQL提供的对应工具为pg_dump和pg_restore。
pg_dump是用于备份PostgreSQL数据库的工具。它可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。
转储格式可以是一个脚本或者归档文件。转储脚本的格式是纯文本,包含许多SQL命令,这些SQL命令可以用于重建该数据库并将之恢复到保存脚本时的状态。可以使用 psql从这样的脚本中恢复。它们甚至可以用于在其它机器甚至是其它硬件体系的机器上重建数据库,通过对脚本进行一些修改,甚至可以在其它SQL数据库产品上重建数据库。
归档文件格式必须和pg_restore一起使用重建数据库。它们允许pg_restore对恢复什么东西进行选择,甚至是在恢复之前对需要恢复的条目进行重新排序。归档文件也是可以跨平台移植的。
D:\Program Files\PowerCmd>pg_dump --help
pg_dump 把一个数据库转储为纯文本文件或者是其它格式.
用法:  pg_dump [选项]... [数据库名字]
一般选项:
  -f, --file=FILENAME         output file or directory name
  -F, --format=c|d|t|p        output file format (custom, directory, tar, plain text)
  -v, --verbose            详细模式
  -Z, --compress=0-9       被压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败
  --help                       显示此帮助信息, 然后退出
  --versoin                    输出版本信息, 然后退出
控制输出内容选项:
  -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         在只恢复数据的过程中禁用触发器
  --inserts                 以INSERT命令,而不是COPY命令的形式转储数据
  --no-security-labels        do not dump security label assignments
  --no-tablespaces           不转储表空间分配信息
  --no-unlogged-table-data    do not dump unlogged table data
  --quote-all-identifiers     quote all identifiers, even if not key words
  --serializable-deferrable   wait until the dump can run without anomalies
--use-set-session-authorization
   使用 SESSION AUTHORIZATION 命令代替ALTER OWNER 命令来设置所有权
联接选项:
  -h, --host=主机名        数据库服务器的主机名或套接字目录
  -p, --port=端口号        数据库服务器的端口号
  -U, --username=名字      以指定的数据库用户联接
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)
  --role=ROLENAME          do SET ROLE before dump
如果没有提供数据库名字, 那么使用 PGDATABASE 环境变量的数值.

二、pg_dump的使用实例
1、创建两个数据库
CREATE DATABASE "TestDb1"
  WITH OWNER = "TestRole1"
       ENCODING = 'UTF8'
       TABLESPACE = "TestTbs1";
CREATE DATABASE "TestDb2"
  WITH OWNER = "TestRole1"
       ENCODING = 'UTF8'
       TABLESPACE = "TestTbs1";
在TestDb1中创建表csm_bill、cfg_public_int_transport插入几条记录,并创建索引,索引使用索引表空间TestTbsIndex。

2、仅迁移数据库结构:
E:\>pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1
口令:
-U TestRole1和超级用户-U postgres结果完全相同:
E:\>pg_dump -U postgres -s -f TestDb11.sql TestDb1
E:\>psql -U TestRole2 -f TestDb1.sql TestDb2 >a.txt 2>&1
用户 TestRole2 的口令:
导入时,使用-U TestRole2往往有很多权限不够,要想成功导入需要修改相关数据库对象的属主,所以最好使用超级用户-U postgres:
E:\>psql -U postgres -f TestDb1.sql TestDb2 >a.txt 2>&1
不转储权限选项:-x
E:\>pg_dump -U postgres -x -s -f TestDb12.sql TestDb1
TestDb12.sql比TestDb1.sql少了一下几行:


为了可以多次运行TestDb1.sql,可以在文件开始加以下两行:
drop schema public cascade;
create schema public;
或者使用-c选项:
E:\>pg_dump -U postgres -c -x -s -f TestDb13.sql TestDb1
TestDb13.sql比TestDb1.sql多以下几行:

此时,可以多次运行:
E:\>psql -U postgres -f TestDb13.sql TestDb2 >a.txt 2>&1
但是,如果两个库有不同的表或索引,应该使用第一种方法,因为第二种方法在找不到某些数据库对象时会报错。

3、迁移数据库结构和数据(可以实现数据库的备份与恢复)
数据的复制使用copy命令:
E:\>pg_dump -U postgres TestDb1>TestDb14.sql

数据的复制使用insert语句:
E:\>pg_dump -U postgres --column-inserts TestDb1>TestDb15.sql

4、把远程linux上PostgreSQL上的cpost数据库结构迁移至本地PostgreSQL
(1)在本地建一个完全相同的环境
create user "cpost" inherit createdb;
create tablespace "pis_data" owner cpost location 'E:\PostgreSQL/data/pis_data';
create tablespace "pis_index" owner cpost location 'E:\PostgreSQL/data/pis_index';
远程数据库cpost仍使用了默认表空间:
CREATE DATABASE cpost
  WITH OWNER = cpost
       --ENCODING = 'LATIN9'
       TABLESPACE = pg_default
       --LC_COLLATE = 'C'
       --LC_CTYPE = 'C'
       CONNECTION LIMIT = -1;
使用以上三个参数报错,建成后的数据库如下:
CREATE DATABASE cpost
  WITH OWNER = cpost
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'Chinese (Simplified)_People''s Republic of China.936'
       LC_CTYPE = 'Chinese (Simplified)_People''s Republic of China.936'
       CONNECTION LIMIT = -1;
(2)使用pg_dump迁移表结构
使用-h选项,使导出的sql文件直接存放在本地:
E:\>pg_dump -h 132.10.10.11 -p 1234 -U cpost -x -s -f cpost.sql cpost
E:\>psql -U postgres -f cpost.sql
导入成功,但报了一个错误:
psql:cpost.sql:22: ERROR:  character 0xe99499 of encoding "UTF8" has no equivalent in "LATIN9"
字符集错误,字符集问题详见我的另一篇blog:由PostgreSQL的区域与字符集说起

三、使用pg_dump和pg_restore实现数据库的备份与恢复
E:\>pg_restore --help
pg_restore 从一个归档中恢复一个由 pg_dump 创建的 PostgreSQL 数据库.
用法:
  pg_restore [选项]... [文件名]
一般选项:
  -d, --dbname=名字        连接数据库名字
  -f, --file=文件名        输出文件名
  -F, --format=c|d|t       backup file format (should be automatic)
  -l, --list               打印归档文件的 TOC 概述
  -v, --verbose            详细模式
  --help                   显示此帮助信息, 然后退出
  --version                输出版本信息, 然后退出恢复控制选项:
  -a, --data-only          只恢复数据, 不包括模式
  -c, --clean              在重新创建数据库对象之前需要清除(删除)数据库对象
  -C, --create             创建目标数据库
  -e, --exit-on-error      发生错误退出, 默认为继续
  -I, --index=名称         恢复指定名称的索引
  -j, --jobs=NUM           可以执行多个任务并行进行恢复工作
  -L, --use-list=文件名    从这个文件中使用指定的内容表排序输出
  -n, --schema=NAME      在这个模式中只恢复对象
  -O, --no-owner           忽略恢复对象所属者
  -P, --function=名字(参数)  恢复指定名字的函数
  -s, --schema-only        只恢复模式, 不包括数据
  -S, --superuser=NAME     使用指定的超级用户来禁用触发器
  -t, --table=NAME         恢复指定命字的表
  -T, --trigger=NAME       恢复指定命字的触发器
  -x, --no-privileges      跳过处理权限的恢复 (grant/revoke)
  -1, --single-transaction   作为单个事务恢复
--disable-triggers        在只恢复数据的过程中禁用触发器
  --no-data-for-failed-tables 没有恢复无法创建表的数据
  --no-security-labels     do not restore security labels
--no-tablespaces          不恢复表空间的分配信息
  --use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替ALTER OWNER命令来设置对象所有权
联接选项:
  -h, --host=主机名        数据库服务器的主机名或套接字目录
  -p, --port=端口号        数据库服务器的端口号
  -U, --username=名字      以指定的数据库用户联接
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)
  --role=ROLENAME          在恢复前执行SET ROLE操作
如果没有提供输入文件名, 则使用标准输入.
1、使用dump格式备份和恢复:
E:\>pg_dump -U postgres -Fc TestDb1 >TestDb1.dump
postgres=# drop database "TestDb2";
DROP DATABASE
postgres=# create database "TestDb2"
postgres-# with owner="TestRole2"
postgres-# tablespace="TestTbs2";
CREATE DATABASE
E:\>pg_restore -U postgres -d TestDb2 TestDb1.dump >a.txt 2>&1
2、使用tar格式备份和恢复:
E:\>pg_dump -U postgres -Ft TestDb1>TestDb1.tar
postgres=# drop database "TestDb2";
DROP DATABASE
postgres=# create database "TestDb2"
postgres-# with owner="TestRole2"
postgres-# tablespace="TestTbs2";
CREATE DATABASE
E:\>pg_restore -U postgres -d TestDb2 TestDb1.tar >a.txt 2>&1

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pg_dump实例详解 的相关文章

  • [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度 搜狗 googto 谷歌镜像 等图片时 出现 无法打开图片或已损坏 的问题 作者对它进行简单的探讨 同时 作者将进一步帮你巩固selenium自动化操作和urlli
  • 【C语言】数据结构-----字符串匹配之KMP算法

    目录 算法简介 匹配原理 第一次匹配 第二次匹配 第三次匹配 第四次匹配 可能失配位置 next数组求解 next数组的由来 next数组的用法 next数组代码的实现 KMP算法的实现 示例 完整的代码 KMP算法与BF算法相比较 算法简
  • python处理ECG二进制文件(.dat文件)和.db文件

    python处理ECG二进制文件 dat文件 和 db文件 最近拿到了一批ECG原数据文件 包括 dat和 db文件 需要自己解析 记录一下解析结果 1 dat 文件是病人的心电数据 以二进制形式读取和解析 数据文件的说明 数据文件记录的是
  • FLASH擦除问题

    我们最近用mm32f3277的flash mm32f3277的flash有512K的空间 128个扇区 每个扇区有四页 每页有1K 图一 mm32f3277的flash 我们写入flash用的是片内FLASH存储器 片内FLASH存储器的地
  • java多线程异步处理批量数据

    前段时间需要一个批量请求别人接口的模块 由于别人接口反应速度慢导致批量请求耗费时间太多 于是在网上多发查询找到一个批量异步接口切能返回数据 多线程配置类 import org springframework aop interceptor
  • error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    一 问题描述 打开用VS2010打开vs 2008创建的解决方案 重新生成解决方案时 报如下错误 error LNK1123 转换到 COFF 期间失败 文件无效或损坏 二 原因分析 输入文件必须具有通用对象文件格式 COFF 如果输入文件
  • Maven 子项目

    使用maven搭建的子项目 其中包含web子项目和其他依赖子项目 在使用tomcat构建war的时候 会构建该web相对应的war maven关联的其他子项目会以jar包的形式关联到lib中 从而 使得web项目中可以引用其他包的类以及配置
  • 【C++】友元

    目录 友元的定义 全局函数做友元 类做友元 成员函数做友元 友元的定义 友元定义在类外面的一种函数或者类 友元不是成员函数 但是友元可以对某个类里面私有成员进行访问 要想友元获得访问某个类私有成员的权限 我们需要利用关键字friend并且在
  • eclipse web 项目中配置jetty-maven-plugin 版本 9.4.2.v20170220

    在web项目的pom xml文件中添加jetty maven plugin插件配置 如下
  • 【图像处理】去雾算法

    真正了解了什么叫最简单的就是最美好的 真正的好文章不需要大堆公式堆积显得充实 而是最最平实的思想 这篇文章的 原文PDF PPT 感兴趣的可以了解一下 这篇文章的目的就是以最简单的思路将图像达到去雾效果 用Matlab编了一下 效果图特别好
  • Windows11 安装 chocolatey 包管理器

    众所周知每个Linux发行版都有一个包管理器 比如Ubuntu的 apt get Centos的 yum Arch Linux的 pacman 那么问题来了 Windows有包管理器吗 Windows 目前最新版的系统有一个 winget
  • LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>

    作者 史宁宁 snsn1984 LLVM最终有了一本系统的书了 Getting Started with LLVM Core Libraries 这本书号称是LLVM的第一本书 可是据说日本早就有两本日文的关于LLVM的书 这个了解的不多
  • 数据库学习笔记(4)——SQL语言之DQL

    复杂分组查询举例 子查询 把select查询结果当作数据使用时 这种结构就是子查询 子查询练习 子查询练习 查询学生成绩在70分以上的学生学号和姓名 select stu id as id stu name as 姓名 from tb st
  • 傻白探索Chiplet,关于EPYC Zen2 的一些理解记录(五)

    目录 一 知识铺垫 1 Chiplet 2 Zen架构 3 EPYC和Ryzen 4 EPYC Zen2 二 关于EPYC Zen2里的部件 1 内存控制器 2 PCIe控制器 3 Infinity Fabric总线 4 关于CCX和CCD
  • 深度学习之人物年龄预测

    1 年龄检测 论文地址 Age and Gender Classification using Convolutional Neural Networks 论文作者提出了一个简单的类似AlexNet的网络结构 该网络总共学习了8个年龄段 0
  • CentOS中DHCP服务器的搭建

    1 进入网卡配置文件 将网卡的网络修改为静态配置 2 yum y insytall dhcp 3 vi etc dhcp dhcpd conf 4 vi usr share doc dhcp dhcpd conf example 5 cp
  • 支付宝小程序 生成https链接 生成alipays协议链接

    生成https协议链接 const target 返回的页面地址 const online https render alipay com p s medical card online www index html returnUrl e
  • c语言课程设计(学生籍贯管理系统)学完c语言你可以做的案例

    目录 第一章 设计简介及设计方案讨论 1 1背景和意义 1 1 1背景 1 1 2意义 1 2需求分析 1 3使用说明 1 4流程图 1 5设计 1 5 1功能实现 第二章 核心代码讲解 2 1核心代码与分析 2 1 1代码和分析 第三章

随机推荐

  • tensorflow ResNet

    借鉴点 层间残差跳连 引入前方信息 减少梯度消失 使神经网络层数变身成为可能 ResNet 即深度残差网络 由何恺明及其团队提出 是深度学习领域又一具有开创性的 工作 通过对残差结构的运用 ResNet 使得训练数百层的网络成为了可能 从而
  • ROS理论与实践学习汇总(持续更新中······)

    创建工作空间 创建工作空间 mkdir p catkin ws src cd catkin ws src catkin init workspace 初始化 编译工作空间 cd catkin ws catkin make 设置环境变量 so
  • 07黑马QT笔记之信号重载时connect的写法(带参数的信号)

    07黑马QT笔记之信号重载时connect的写法 带参数的信号 1 首先说这个例子要做的事情 一个窗口有两个按钮 分别为按钮1 按钮2 当我按下按钮2时 他会发射两个信号 这两个信号重载 名字一样 所以当我接收这两个信号并处理时 conne
  • Web存储

    1 Web存储 locationStorage 用于永久性保存数据 sessionStorage 用于临时存储数据 关闭页面时 数据丢失 用法 两个对象用法一致 setItem key value 存储数据 getItem key 取数据
  • Java如何制作图片输入验证码

    Java如何制作图片输入验证码 简介 验证码 CAPTCHA 是 Completely Automated Public Turing test to tell Computers and Humans Apart 全自动区分计算机和人类的
  • 树莓派4b串口设置教程(适用于新手)

    树莓派4b串口设置教程 适用于新手 树莓派4b串口配置 适用于新手 本人也是刚刚学习了树莓派 考虑到目前入坑的像我一样的小白比较多 所以我整理了一下前辈们的各种经验 准备针对树莓派4b这款最新的产品 做一个比较详细简单的串口配置介绍 1 基
  • 似然和概率的透彻解析 ------- 最大似然估计(Maximum likelihood estimation)

    似然与概率 在统计学中 似然函数 likelihood function 通常简写为likelihood 似然 是一个非常重要的内容 在非正式场合似然和概率 Probability 几乎是一对同义词 但是在统计学中似然和概率却是两个不同的概
  • Cocos Creator Android打包 apk

    文章目录 1 引言 2 配置打包环境 2 1 下载Java SDK JDK 2 2 下载NDK 3 配置原生发布环境路径 4 打包发布原生平台 5 构建原生工程 6 通过编译器去编译和运行 7 总述 8 结束语 1 引言 今天事情不是很多抽
  • el-select与el-tree结合使用,实现select框下拉使用树形结构选择数据

    使用el select与el tree 实现如下效果 代码如下 注意点 搜索input框的代码一点放在option上面 不要放在option里面 否则一点击搜索框 下拉框就会收起来 不能使用
  • 05-JVM内存分配机制深度剖析

    上一篇 04 JVM对象创建深度剖析 1 对象栈上分配 我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配 当对象没有被引用的时候 需要依靠GC进行回收内存 如果对象数量较多的时候 会给GC带来较大压力 也间接影响了应用的性能
  • react入门必看攻略

    一 react是什么 react是一个用于构建用户界面的 JavaScript 库 二 使用步骤 安装react 1 安装脚手架 npm i create react app g 2 创建项目 create react app 项目名 3
  • JavaScript 全局

    解释 JavaScript 全局属性和方法可用于创建Javascript对象 JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值 NaN 指示某个值是不是数字值 undefined 指示未定义的值 JavaS
  • 宝塔面板解决跨域

    1 找到宝塔面板配置nginx文件的地方 2 增加如下代码 add header Access Control Allow Origin add header Access Control Allow Methods POST PUT GE
  • 使用git查看修改记录

    查看文件中每行代码的最近一次修改人 git blame file name git blame
  • 判断能否被3,5,7整除

    输入一个整数 判断它能否被3 5 7整除 并输出以下信息 1 能同时被3 5 7整除 直接输出3 5 7 每个数中间一个空格 2 能被其中两个数整除 输出两个数 小的在前 大的在后 例如 3 5或者 3 7或者5 7 中间用空格分隔 3 能
  • 简单的Arima模型自动最优拟合与预测

    昨天用R折腾了一个简单的时间序列数据Arima自动拟合与预测 过程不复杂 但由于用得不多 为了防止忘记 撰文记录 打开R 安装一个叫做 Forecast 的包 每次开启R后 使用之前用 library forecast 加载该包 这里我用传
  • pickle.load,pickle.dump构建Coco数据集labels的pickle文件

    1 效果图 write pickle coco classes pickle done loading coco classes pickle person bicycle car motorcycle airplane bus train
  • OSI七层模型,报文数据包帧详解,tcp三次握手与四次挥手说明,WireShark抓包分析

    目录 浅谈OSI参考模型 七层模型 什么是OSI参考模型 OSI参考模型的划分 OSI模型与TCP IP模型的比较 七层详解 工作流程 TCP IP协议栈 简介 通用协议栈描述 报文 数据报 报文段 数据包 帧的概念 tcp三次握手与四次挥
  • Callable接口详解

    Callable接口详解 Callable 返回结果并且可能抛出异常的任务 优点 可以获得任务执行返回值 通过与Future的结合 可以实现利用Future来跟踪异步计算的结果 Runnable和Callable的区别 1 Callable
  • pg_dump实例详解

    本文转自 http blog chinaunix net uid 354915 id 3504632 html 一 pg dump的用法 数据库的导入导出是最常用的功能之一 每种数据库都提供有这方面的工具 例如Oracle的exp imp