pg_dump和pg_restore用法

4,604 阅读3分钟
原文链接: click.aliyun.com

pg_dump和pg_restore用法

jason0 2018-11-01 15:38:15 浏览26 评论0

摘要: PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。pg_dump 一次只转储一个数据库, 并且不会转储有关角色或表空间的信息 (因为那些是群集范围而不是每个数据库)。

PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。
pg_dump 一次只转储一个数据库, 并且不会转储有关角色或表空间的信息 (因为那些是群集范围而不是每个数据库)。为支持方便地转储数据库群集的全部内容, 提供了 pg_dumpall 程序。pg_dumpall 在给定的群集中备份每个数据库, 并保留群集范围内的数据, 如角色和表空间定义。
PostgreSQL提供的一个工具pg_restore用来导入数据

1 具体用法参考help

$ pg_dump --help
pg_dump dumps a database as a text file or to other formats.

Usage:
pg_dump [OPTION]... [DBNAME]

General options:
-f, --file=FILENAME          output file or directory name
-F, --format=c|d|t|p         output file format (custom, directory, tar,
                           plain text (default))
......

$ pg_restore --help
pg_restore restores a PostgreSQL database from an archive created by pg_dump.

Usage:
pg_restore [OPTION]... [FILE]

General options:
-d, --dbname=NAME        connect to database name
-f, --file=FILENAME      output file name
-F, --format=c|d|t       backup file format (should be automatic)
-l, --list               print summarized TOC of the archive
-v, --verbose            verbose mode
-V, --version            output version information, then exit
-?, --help               show this help, then exit
......

2 导出

操作系统平面文件格式
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Fp -t test_dump > /tmp/test_dump1.dmp highgo
自定义格式
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Fc -t test_dump > /tmp/test_dump2.dmp highgo
tar包格式
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Ft -t test_dump > /tmp/test_dump3.dmp highgo
自定义、0级压缩格式
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Fc -Z 0 -t test_dump > /tmp/test_dump4.dmp highgo
自定义、9级压缩格式
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Fc -Z 9 -t test_dump > /tmp/test_dump4.dmp highgo
显示详细导出过程
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Fc -v -t test_dump > /tmp/test_dump6.dmp highgo
压缩格式的文件明显较小
# ll

-rw-rw-r-- 1 pg   pg   379738 Nov  1 15:05 test_dump1.dmp
-rw-rw-r-- 1 pg   pg   217142 Nov  1 15:05 test_dump2.dmp
-rw-rw-r-- 1 pg   pg   384512 Nov  1 15:05 test_dump3.dmp
-rw-rw-r-- 1 pg   pg   429852 Nov  1 15:08 test_dump4.dmp
-rw-rw-r-- 1 pg   pg   217142 Nov  1 15:07 test_dump5.dmp
不同格式的文件
# file test_dump1.dmp
test_dump1.dmp: ASCII text
# file test_dump2.dmp
test_dump2.dmp: PostgreSQL custom database dump - v1.13-0
# file test_dump3.dmp
test_dump3.dmp: POSIX tar archive
# file test_dump4.dmp
test_dump4.dmp: PostgreSQL custom database dump - v1.13-0

注意1:默认是-Fp格式(操作系统平面文件)
注意2:并行导出只支持-Fd 目录格式
$ pg_dump -h 192.168.6.16 -U highgo -p 5433 -Fc -v -j 2 -Z 1 -t test_dump > /tmp/test_dump3.dmp highgo
pg_dump: parallel backup only supported by the directory format

3 导入

导入前创建table所需的role
CREATE ROLE highgo;
ALTER ROLE highgo WITH NOSUPERUSER INHERIT LOGIN NOCREATEROLE NOCREATEDB NOREPLICATION PASSWORD 'highgo@123';

导入失败
$ pg_restore -h 127.0.0.1 -d postgres -p 5432 -U pg /tmp/test_dump1.dmp
pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

注:pg_resotre仅支持Fc/Ft格式的导出文件,Fp格式的文件是sql脚本,需要使用psql工具导入脚本数据
如:
postgres=# i /tmp/test_dump1.dmp

导入成功
$ pg_restore -h 127.0.0.1 -d postgres -p 5432 -U pg /tmp/test_dump2.dmp

postgres=# select count(*) from test_dump;
count
-------
10000
(1 row)
【云栖快讯】诚邀您免费学习【阿里云总监课】!首次集齐12位阿里云技术高管,从理论到实践倾囊相授,还有30元代金券,戳链接马上领!  详情请点击 评论 (0) 点赞 (0) 收藏 (0)
分享到:

相关文章

网友评论