1、
PostgreSQL为这个用途提供了pg_dump工具。
这条命令的基本用法是:
pg_dump dbname > outfile
从转储中恢复:
psql dbname < infile
pg_dump和psql可以通过管道读写,这样我们就可能从一台主机上将数据库转储到另一台主机上,比如:
pg_dump -h host1 dbname | psql -h host2 dbname
pg_dump在一个时间只转储一个单独的数据库, 它不转储有关角色或表空间信息(因为这些是集群范围,而不是每个数据库)。 为了支持 方便转储整个数据库集群的全部内容。 因此我们提供了pg_dumpall程序。这个命令的基本用法是:
pg_dumpall > outfile
pg_dumpall > /opt/pgsql-9.4.4/data/all.dump
生成的转储可以用psql恢复:
psql -f infile -d postgres
psql -f /opt/pgsql-9.4.4/data/all.dump -d postgres
当创建大的pg_dump输出文件时,限制产生问题的一些操作系统允许最大文件大小。 因为pg_dump输出到标准输出, 你可以用标准的Unix工具绕开这个问题:有一些可能的方法:
使用压缩转储. 使用你熟悉的压缩程序(比如gzip):
pg_dump dbname | gzip > filename.gz
使用下面命令恢复:
gunzip -c filename.gz | psql dbname
或者:
cat filename.gz | gunzip | psql dbname
使用split. split允许用下面的方法把输出分解成操作系统可以接受的大小。 比如,让每个块大小为1MB:
pg_dump dbname | split -b 1m - filename
用下面命令恢复:
cat filename* | psql dbname
使用pg_dump自定义转储格式. 如果PostgreSQL是在一个安装了zlib 压缩库的系统上制作的, 那么自定义转储格式将在写入输出文件的时候压缩数据。 它会生成和使用gzip类似大小的转储文件,但是还附加了一个优点: 你可以有选择地恢复库中的表。下面的命令用自定义转储格式转储一个数据库:
pg_dump -Fc dbname > filename
自定义格式的转储不是脚本,不能用于psql,而是需要使用pg_restore转储。 比如:
pg_restore -d dbname filename
请参阅pg_dump和pg_restore手册获取细节。
对于非常大的数据库,你可能需要结合split以及其他两种方法之一。
使用pg_dump的并行转储功能. 为了加快大数据库的转储,你可以使用pg_dump并行模式。这将同时转储多个表。你可以使用-j参数控制并行性程度。并行转储只支持"目录"归档模式。
pg_dump -j num -F d -f out.dir dbname
postgres备份和恢复 ---逻辑备份
最新推荐文章于 2024-07-19 07:07:56 发布