持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
Postgresql 导入导出工具介绍
简介
在我们开发过程中,经常会遇到把生产环境或测试环境的数据库导入至本地进行测试。今天这篇给大家分享一下,如果使用Postgresql的导出工具及导入工具完成这项工作
命令及工具
导出工具
导出工具用的是pg_dump ,在Windows平台下这个工具叫做pg_dump.exe,谁用来导出指定数据库的工具,常用参数有:
-
-h 指定运行服务器的主机名,就是要导出数据所在的地址
-
-p 对应的端口号
-
-U 有权限的一个用户名
-
-d 要导出的数据库名字
-
-f 保存的文件名
-
-w 不发出请输入密码的问题,如果无法自动连接就会连接失败,对于我们编写自动脚本很有帮助
-
-F 设置导出的文件格式,可以选择:
- -Fp 纯文本SQL脚本文件(缺省), db.sql
- -Fc 适合输入到pg_restore里的自定义格式归档,有压缩效果 db.dump
- -Ft 适合输入到pg_restore里的
tar归档文件。没有压缩效果 db.tar
导入工具
导入工具有两种可以选择,分别是psql,和pg_restore,但是psql只能导入纯文本sql格式的数据,而pg_restore则可以导入任何格式的数据,在这里我们会选择使用pg_restore来进行导入,常用参数有:
- -h 指定运行服务器的主机名,就是要导出数据所在的地址
- -p 对应的端口号
- -U 有权限的一个用户名
- -d 要导入进去的数据库名字
- -j 并行导入,后面数值可以是cpu的核心数量
- -F 导入的文件格式,和导出的时候相同就好
- 要导入数据库文件
要注意的是导入时,要导入一个空的数据库中,且要手动去创建这个目标数据库,虽然文档中存在-C -c参数,但经过测试是没有效果的:
-c --clean
创建数据库对象前先清理(删除)它们。(如果任一对象不在目标数据库中, 这可能会产生一些无害的错误消息。)
-C --create
在恢复数据库之前先创建它。如果也声明了
--clean, 那么在连接到数据库之前删除并重建目标数据库。如果出现了这个选项,和
-d在一起的数据库名只是用于发出最初的DROP DATABASE和CREATE DATABASE命令。 所有数据都恢复到名字出现在归档中的数据库中去。
密码文件
由于我们是想要通过脚本去导入导出,所以采用的也是免密连接的方式,在pgsql中,可以通过设置密码文件:.pgpass来达到免密的目的。
下面是.pgpass文件的格式:
IP地址:端口号:数据库(可以用*代表所有数据库):用户名:密码
ip:port:db:user:pass
实例测试
本地数据库:
- ip: 127.0.0.1
- port: 5432
- user:postgres
- passwd:123456
目标数据库:
- ip: 192.168.1.5
- port: 15432
- user:user11
- passwd:abc123+
- db: video
切换用户
# 登陆到postgres用户
su postgres
# 切换至~目录
cd ~
配置免密文件
把本地数据库和目标数据库的连接信息配置进.pgpass文件中:
# 本地的连接信息
echo '127.0.0.1:5432:*:postgres:123456' >> .pgpass
# 目标的连接信息
echo '192.168.1.5:15432:*:user11:abc123+' >> .pgpass
进行导出:
# 导出数据库
pg_dump -h 192.168.1.5 -p 15432 -d video -U user11 -w -Fc -f db.dump
命令执行成功之后会导出至当前文件夹下,然后进行导入
# 使用template0模板创建一个纯净的数据库
psql -c 'CREATE DATABASE video WITH TEMPLATE template0;'
pg_restore -Fc -j 6 -w -d video db.dump
会注意到我们在导入的时候并没有指定IP地址端口号用户名之类的信息,因为我们使用的就是默认的信息,在默认的情况下,ip为127.0.0.1,端口号为543,用户则默认是当前系统登陆的用户
结语
这里主要介绍了Postgresql数据库的导出工具,导入工具的使用,和认证文件.pgpass的介绍,希望大家有所收获!!!