一、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

postgresql导入mysql的备份_PostgreSQL数据备份、导入转相关推荐

  1. mysql数据库的在线数据备份与数据恢复

    MySQL是一种常用的关系型数据库管理系统,它支持在线备份和恢复数据.在线备份指的是在MySQL数据库运行时备份数据,而不会中断或影响现有的数据库服务.在本文中,我们将介绍MySQL数据库的在线数据备 ...

  2. 【MySQL基础篇】数据导出导入权限与local_infile参数

    [MySQL基础篇]数据导出导入权限与local_infile参数 问题背景 数据导出测试 创建测试库(在主库进行) 测试数据导出(在从库进行) 测试数据导入(在主库进行) 问题背景 MySQL高可用 ...

  3. GoodSync 数据自动同步备份工具VS傲梅轻松备份系统数据备份工具 哪款更好?

    备份和同步软件的使用越来越广泛,因为在这个数据驱动的时代,数据的备份和恢复非常重要.在这里我想向大家推荐两款备份和同步软件--GoodSync和傲梅轻松备份. GoodSync是一款备份和同步软件,它 ...

  4. mysql grant all privileges_MySQL数据备份及还原(一)

    关于删库跑路的事故现在已经屡见不鲜了,数据备份的必要性是企业数据管理极其重要的一项工作.关于数据备份.恢复也有很多场景及方法,本系列也会将主要的几种工具通过案例进行演示. 本系列将从逻辑备份及恢复开始 ...

  5. mysql 的数据备份_MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  6. mysql数据库的冷热备份_MySQL数据备份方式,及热备与冷备的优缺点

    一.按照数据库的运行状态分类: (1) 热备:在数据库运行时,直接进行备份,对运行的数据库没有影响 (2) 冷备:在数据库停止运行的时候进行备份,这种备份方式最为简单,只需要拷贝数据库物理文件即可. ...

  7. 爱数oracle备份软件,爱数备份软件下载 爱数备份卫士 数据备份软件

    这款爱数备份软件是一款功能丰富的数据备份软件,又叫爱数备份卫士,内置强大的备份引擎源自于爱数多年的不懈努力,可帮助用户轻松完成日常工作文档.图片.邮件等资料的备份,爱数备份卫士为用户提供领先的备份.容 ...

  8. mysql数据库中excel数据的导入与导出

    mysql数据库数据与excel数据在python大数据中是比较常见的 在导入导出之前必须先配置好路径权限 1.查看导入导出限制路径 # 查看路径 SHOW VARIABLES LIKE '%secu ...

  9. MySQL导出表结构表数据以及导入数据

    导出表结果表数据 使用mysqldump命令行下具体用法如下: mysqldump -u用户名 -p密码 -d 数据库名 表名 > 脚本名; 1.导出数据库为dbname的表结构(其中用户名ro ...

最新文章

  1. Hadoop集群安全性:Hadoop中Namenode单点故障的解决方案及详介AvatarNode
  2. centos下保留python2安装python3
  3. 【转帖】.Net中C#的DllImport的用法
  4. 如何安装tensorflowGPU环境搭建(不报AVX2的警告)
  5. phpcms函数:用*号替换(私密信息)中间数据(如手机号、邮箱)
  6. english grammar in use 电子版_③ 采购笔记之节点与凭证、采购的进阶、采购合同要素。(电子版整理中)...
  7. 复用管脚_如何实现UART的分时复用
  8. jar打包 剔除第三方依赖以及它的依赖_spring boot + gradle 打包 bootJar 瘦身分离 lib...
  9. notepad++ 将JSON压缩成一行与JSON格式化
  10. dlna和miracast可以共存吗_同屏镜像功能哪家强?DLNA miracast等技术解读
  11. mongodb导出csv文件到vcf
  12. 【记得交作业】波波离散实验报告一(python实现)
  13. 永中集成Office 2013 简体中文免费版
  14. POSTman安装步骤
  15. Gerrit 安装lfs插件
  16. 《三体1》6.射手和农场主
  17. 第二章-数据描述(初级统计)
  18. 前两天离职了,不想找工作,心态不好
  19. windows如何设置默认“大图标”显示
  20. grafana登录密码重置

热门文章

  1. aspx-cs-dll :在部署后就让所有的aspx处于已经编译成dll的状态
  2. ROP简单 ret2syscall
  3. centos 创建 logrotate 进行日志分割
  4. HTTP协议:看个新闻原来这么麻烦
  5. bootstrap checkbox
  6. HttpServletRequest和HttpServletResponse简介
  7. 【设计模式】前端控制器模式
  8. nginx和fpm的进程数配置和502,504错误
  9. xsd的unique验证
  10. 北大青鸟广州天河:高中生做技术经理!