postgresql备份恢复之pg_dump大数据处理

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 目录[-]介绍使用管道压缩和解压custom-formatdirectory-format其他一些参数简单说明介绍官方文档介绍的主要有三种方式:通过unix管道,直接读取pg_dump的输出来压缩.

介绍

官方文档介绍的主要有三种方式:

  1. 通过unix管道,直接读取pg_dump的输出来压缩.
  2. 使用pg_dump的custom-format
  3. 使用pg_dump的directory-format

使用管道压缩和解压

由于pg_dump工具可以输出到标准输出,可以使用unix管道来直接压缩

1.压缩方法

[postgres@fnddb ~]$ pg_dump database1 | gzip > database1.sql.gz  

还原

[postgres@fnddb ~]$ createdb -T template0 testdb1
[postgres@fnddb ~]$ gunzip -c database1.sql.gz | psql testdb1
......

2.切分

切分文件

    [postgres@fnddb ~]$ pg_dump database1 | split -b 1k - database1.sql
    [postgres@fnddb ~]$ ll
    total 16
    -rw-rw-r--. 1 postgres postgres 1024 Feb 10 21:46 database1.sqlaa
    -rw-rw-r--. 1 postgres postgres 1024 Feb 10 21:46 database1.sqlab
    -rw-rw-r--. 1 postgres postgres   35 Feb 10 21:46 database1.sqlac

还原

[postgres@fnddb ~]$ cat database1.sql* | psql testdb1
......

custom-format

记得编译安装时提示zlib库没有安装,custom-dump format会使用zlib库压缩输出文件 
当然这不是文本文件,恢复需要使用pg_restore命来来恢复.

[postgres@fnddb ~]$ pg_dump -Fc database1 -f database1.c.dump
[postgres@fnddb ~]$ file database1.c.dump 
database1.c.dump: PostgreSQL custom database dump - v1.12-0

还原

[postgres@fnddb ~]$ createdb -T template0 testdb1
[postgres@fnddb ~]$ pg_restore -d testdb1 database1.c.dump 

可以只恢复自己赶兴趣的对象

[postgres@fnddb ~]$ pg_restore -l database1.c.dump > database1.c.dump.list
[postgres@fnddb ~]$ vi database1.c.dump.list 
;
; Archive created at Tue Feb 10 22:02:23 2015
;     dbname: database1
;     TOC Entries: 16
;     Compression: -1
;     Dump Version: 1.12-0
;     Format: CUSTOM
;     Integer: 4 bytes
;     Offset: 8 bytes
;     Dumped from database version: 9.4.1
;     Dumped by pg_dump version: 9.4.1
;
;
; Selected TOC Entries:
;
;2872; 1262 16411 DATABASE - database1 hippo
;6; 2615 2200 SCHEMA - public postgres
;2873; 0 0 COMMENT - SCHEMA public postgres
;2874; 0 0 ACL - public postgres
;175; 3079 12723 EXTENSION - plpgsql
;2875; 0 0 COMMENT - EXTENSION plpgsql
174; 1259 16544 TABLE public t3 hippo
;172; 1259 16512 TABLE public tab2 postgres
;2876; 0 0 ACL public tab2 postgres
;173; 1259 16524 TABLE public tab3 postgres
;2877; 0 0 ACL public tab3 postgres
2867; 0 16544 TABLE DATA public t3 hippo
;2865; 0 16512 TABLE DATA public tab2 postgres
;2866; 0 16524 TABLE DATA public tab3 postgres

只需要将不需要恢复的对象使用;注释掉就可以了,然后还原带上此列表

[postgres@fnddb ~]$ createdb -T template0 testdb2
[postgres@fnddb ~]$ pg_restore -L database1.c.dump.list -d testdb2 database1.c.dump
[postgres@fnddb ~]$ psql testdb2
psql (9.4.1)
Type "help" for help.

testdb2=# \dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | t3   | table | hippo
(1 row)

testdb2=# select * from t3;
  id   
-------
 t3
 user3
(2 rows)

directory-format

这种模式可以使用pg的多个工作进程.可以极大增强导出大数据库的效率. 
这种模式同一时间导出多个表.也就是并行导出,当然对服务器资源消耗也比较高,不要在高峰时刻进行. 
它输出不是一个文件,需要首先创建一个目录

[postgres@fnddb ~]$ mkdir db.dir
[postgres@fnddb ~]$ pg_dump -Fd -j4 -f db.dir database1
[postgres@fnddb ~]$ ls db.dir
2865.dat.gz  2866.dat.gz  2867.dat.gz  toc.dat
[postgres@fnddb ~]$ cd db.dir
[postgres@fnddb db.dir]$ cat 2866.dat.gz |gunzip 
\.


[postgres@fnddb db.dir]$ cat 2867.dat.gz |gunzip 
t3
user3
t3
user3
t3
user3
\.


[postgres@fnddb db.dir]$ file toc.dat
toc.dat: PostgreSQL custom database dump - v1.12-0

看结果因该是pg_dump导出了一个custom-format格式的数据库结构信息. 
同时将每一个表的数据分别导出到一个压缩文件.恢复使用copy命令可读取的格式 
-j参数指定同时几个进程来同时执行..每个进程同时只处理一个表的数据.

恢复

[postgres@fnddb ~]$ createdb -T template0 testdb3
[postgres@fnddb ~]$ pg_restore -d testdb3 -j4 db.dir

-j参数指定并发的数量(job),pg_restore恢复custom-format格式也可以使用此参数,并非只适用directory-format

其他一些参数简单说明

pg_dump和pg_restore很多参数都很类似.

-n schema |-N schema –只导出(恢复)某个schema|排除某个schema,例子见-t table 
-t table | -T table –导出(恢复)某个表|排除某个表

[postgres@fnddb ~]$ pg_dump -t t3 database1 | grep -i "create table"
CREATE TABLE t3 (
[postgres@fnddb ~]$ pg_dump -T t3 database1 | grep -i "create table"
CREATE TABLE tab2 (
CREATE TABLE tab3 (

–inserts –导出成insert 语句,导入时性能很差,主要为了迁移到其他数据库使用

[postgres@fnddb ~]$ pg_dump database1 | grep -A3 -i "copy"
COPY t3 (id) FROM stdin;
t3
user3
t3
......
[postgres@fnddb ~]$ pg_dump --inserts database1 | grep -i "insert"
INSERT INTO t3 VALUES ('t3');
INSERT INTO t3 VALUES ('user3');
......

-a –只导出数据,不导结构

[postgres@fnddb ~]$ pg_dump database1 | grep -i "create table"
CREATE TABLE t3 (
CREATE TABLE tab2 (
CREATE TABLE tab3 (
[postgres@fnddb ~]$ pg_dump -a database1 | grep -i "create table"

-c –包括drop 对象的语句进去,最好附带–if-exists参数,否则导入时会报一些对象不存在的错误,虽然无关紧要

[postgres@fnddb ~]$ pg_dump database1 | grep -i drop 
[postgres@fnddb ~]$ pg_dump -c database1 | grep -i drop 
DROP TABLE public.tab3;
DROP TABLE public.tab2;
DROP TABLE public.t3;
DROP EXTENSION plpgsql;
DROP SCHEMA public;

-C –包含创建数据库的语句

[postgres@fnddb ~]$ pg_dump database1 | grep -i "create database"
[postgres@fnddb ~]$ pg_dump -C database1 | grep -i "create database"
CREATE DATABASE database1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TABLESPACE = ts01;

其他参数可以通过官方文档或者pg_dump –help来查看

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
1250 1
|
3月前
|
SQL 关系型数据库 数据库
PostgreSQL常用命令,启动连接,pg_dump导入导出
PostgreSQL常用命令,启动连接,pg_dump导入导出
|
6月前
|
分布式计算 关系型数据库 大数据
MaxCompute产品使用合集之怎么才可以将 PostgreSQL 中的 geometry 空间类型字段同步到 MaxCompute 或另一个 PostgreSQL 数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
算法
PostgreSQL16中pg_dump的LZ4和ZSTD压缩
PostgreSQL16中pg_dump的LZ4和ZSTD压缩
189 0
|
SQL 机器学习/深度学习 存储
PostgreSQL逻辑备份pg_dump使用及其原理解析
PostgreSQL逻辑备份pg_dump使用及其原理解析
265 0
|
存储 SQL 关系型数据库
数据库误操作后悔药来了:AnalyticDB PostgreSQL教你实现分布式一致性备份恢复
本文将介绍AnalyticDB PostgreSQL版备份恢复的原理与使用方法。
884 0
数据库误操作后悔药来了:AnalyticDB PostgreSQL教你实现分布式一致性备份恢复
|
Oracle 关系型数据库 Shell
PostgreSQL备份恢复 12.2
本文参考https://yq.aliyun.com/articles/59359
1173 0
PostgreSQL备份恢复 12.2
|
分布式计算 关系型数据库 MaxCompute
Best Practices for Data Migration from MaxCompute to HybridDB for PostgreSQL
Users often struggle to migrate data from MaxCompute to HybridDB. This blog describes five steps that will help you migrate data conveniently.
2939 0
Best Practices for Data Migration from MaxCompute to HybridDB for PostgreSQL
|
SQL 关系型数据库 大数据
MPP架构实时大数据平台,分析性数据库 PostgreSQL 6.0 邀您公体验!
信息摘要: MPP架构实时大数据平台,云数据库 ADB for PostgreSQL 6.0 限时免费公测,邀您体验!适用客户: 互联网/游戏/政务/开发者 / 大型零售连锁商超 / 金融保险行业 / 考试认证的机构/版本/规格功能: 云数据库 ADB for PostgreSQL 6.0 正式发布,基于 Greenplum 最新6.0内核。
2493 0
|
关系型数据库 数据库 PostgreSQL
Postgresql pg_dump&pg_restore用法
PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。pg_dump 一次只转储一个数据库, 并且不会转储有关角色或表空间的信息 (因为那些是群集范围而不是每个数据库)。
11480 0