【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

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机