【PG数据库】PostgreSQL 转储详细操作流程

2024-03-19 17:44

本文主要是介绍【PG数据库】PostgreSQL 转储详细操作流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.pg_dump

pg_dump 是用于备份一种 PostgreSQL 数据库的工具。即使数据库正在被并发使用,它也能创建一致的备份。pg_dump不阻塞其他用户访问数据库(读取或写入)。
pg_dump 只转储单个数据库。要备份一个集簇中 对于所有数据库公共的全局对象(例如角色和表空间),应使用 pg_dumpall。

转储可以被输出到脚本或归档文件格式。脚本转储是包含 SQL 命令的纯文本文件,它们可以用来重构数据库到它被转储时的状态。

另一种可选的归档文件格式必须与 pg_restore配合使用来重建数据库。它们允许 pg_restore 能选择恢复什么,或者甚至在恢复之前对条目重排序。归档文件格式被设计为在架构之间可移植。

当使用归档文件格式之一并与 pg_restore 组合时,pg_dump提供了一种灵活的归档和传输机制。**pg_dump可以被用来备份整个数据库,然后 pg_restore 可以被用来检查归档并/或选择数据库的哪些部分要被恢复。**最灵活的输出文件格式是“自定义”格式( -Fc )和“目录”格式(-Fd)。它们允许选择和重排序所有已归档项、支持并行恢复并且默认是压缩的。“目录”格式是唯一一种支持并行转储的格式。

要声明pg_dump连接哪个数据库服务器,使用命令行选项-hhost 和 -p port 。 默认主机是本地主机或PGHOST环境变量指定的主机。 默认端口是环境变量PGPORT或(如果PGPORT不存在)内建的默认值。

和任何其他PostgreSQL客户端应用一样, pg_dump默认使用与当前操作系统用户名同名的数据库用户名进行连接。 要使用其他名字,要么声明-U选项,要么设置环境变量PGUSER。请注意pg_dump的连接也要通过客户认证机制。

pg_dump对于其他备份方法的一个重要优势是,pg_dump的输出可以很容易地在新版本的PostgreSQL中载入,而文件级备份和连续归档都是极度的服务器版本限定的。pg_dump也是唯一可以将一个数据库传送到一个不同机器架构上的方法,例如从一个32位服务器到一个64位服务器。

2. pg_dump使用

pg_dump生成的文本文件可以由psql程序读取。从转储中恢复的常用命令是:
psql dbname < dumpfile
其中dumpfile就是pg_dump命令的输出文件。这条命令不会创建数据库dbname,必须在执行psql前自己从template0创建(例如,用命令 createdb -T template0 dbname )。psql支持类似pg_dump的选项用以指定要连接的数据库服务器和要使用的用户名。非文本文件转储可以使用 pg_restore 工具来恢复。

使用示例:
1、利用pg_dump进行转储

[root@pgdb_backup]# pg_dump -U postgres mydb > ./pgdb_bk_`date +%F`.sql

也可以压缩来节省存储空间:

[root@pgdb_backup]# pg_dump -U postgres mydb |gzip > ./pgdb_bk_`date +%F`.sql.gz

2、删除原数据库进行测试
postgres=# drop database mydb;
DROP DATABASE

3、创建一个新的空数据库:

CREATE DATABASE mydbWITH TEMPLATE = template0OWNER = mydbENCODING = 'UTF8'LC_COLLATE = 'zh_CN.utf8'LC_CTYPE = 'zh_CN.utf8'CONNECTION LIMIT = -1;

4、将转储文件恢复至mydb中:

[root@ pgdb_backup]# psql -U postgres -d mydb < pgdb_bk_2023-12-04.sql

示例:
1、 将数据库转储,以时间命名:
在这里插入图片描述

2、 为转储文件准备一个空的数据库:

在这里插入图片描述

3、将转储文件还原为数据库:

在这里插入图片描述

3. pg_restore使用

测试导出归档日志文件格式的一种恢复,转储一个数据库到一个自定义格式归档文件:

$ pg_dump -U postgres -Fc mydb > db.dump
导入的时候:
$ pg_restore -U postgres -d mydb pgdb_bk_2023-12-24.dump   --需要重新创建mydb数据库
$ pg_restore -U postgres -C -d postgres pgdb_bk_2023-12-24.dump  --不需要创建mydb

说明:

-C
--create
在恢复一个数据库之前先创建它。如果还指定了 --clean ,在连接到目标数据库之前丢弃
并且重建它。
在使用这个选项时, -d 提到的数据库只被用于发出初始的 DROP DATABASE 和 CREATE
DATABASE 命令。所有要恢复到该数据库名中的数据都出现在归档中。
-d dbname
--dbname=dbname

4. pg_dumpall使用

pg_dump每次只转储一个数据库,而且它不会转储关于角色或表空间(因为它们是集簇范围的)的信息。为了支持方便地转储一个数据库集簇的全部内容,提供了pg_dumpall程序。 pg_dumpall备份一个给定集簇中的每一个数据库,并且也保留了集簇范围的数据,如角色和表空间定义。该命令的基本用法是:

pg_dumpall > dumpfile

转储的结果可以使用psql恢复:

psql -f dumpfile postgres

pg_dumpall工作时会发出命令重新创建角色、表空间和空数据库,接着为每一个数据库pg_dump。这意味着每个数据库自身是一致的,但是不同数据库的快照并不同步。
集簇范围的数据可以使用pg_dumpall的–globals-only选项来单独转储。

5. 大型数据库转储

在一些具有最大文件尺寸限制的操作系统上创建大型的pg_dump输出文件可能会出现问题。pg_dump可以写出到标准输出,因此要使用标准Unix工具来处理这种潜在的问题。有几种主要方法:

1、使用压缩转储。压缩程序,例如gzip:

pg_dump dbname| gzip > filename.gz

恢复:

gunzip -c filename.gz | psql dbname

2、使用split。. split命令允许将输出分割成较小的文件以便能够适应底层文件系统的尺寸要求。例如,让每一块的大小为1兆字节:

pg_dump dbname| split -b 1m – filename

恢复:

cat filename * | psql dbname

3、使用pg_dump的自定义转储格式。. 如果PostgreSQL所在的系统上安装了zlib压缩库,自定义转储格式将在写出数据到输出文件时对其压缩。这将产生和使用gzip时差不多大小的转储文件,但是这种方式的一个优势是其中的表可以被有选择地恢复。下面的命令使用自定义转储格式来转储一个数据库:

	pg_dump -Fc dbname > filename

自定义格式的转储不是psql的脚本,只能通过pg_restore恢复,例如:

pg_restore -d dbname filename

4、使用pg_dump的并行转储特性。. 为了加快转储一个大型数据库的速度,可以使用pg_dump的并行模式。它将同时转储多个表。可以使用-j参数控制并行度。并行转储只支持“目录”归档格式。

pg_dump -j num -F d -f out.dir dbname

可以使用pg_restore -j来以并行方式恢复一个转储。它只能适合于“自定义”归档或者“目录”归档,但不管归档是否由pg_dump -j创建。

这篇关于【PG数据库】PostgreSQL 转储详细操作流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/826776

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基