PostgreSQL备份格式为dmp类型的数据

为了避免叙述唐突,先介绍一下环境背景
项目开发链接的是公司局域网服务器上的数据库,经常需要从此数据库打包数据交给领导,数据库用的是PostgreSQL,而且以前没有接触过使用dmp格式来备份数据。这次研究了一下,但是踩到了许多坑,上网查询前辈们的经验也是只言片语。不过好在最终把问题解决了,在这里将自己的方法和前辈们的经验汇总一下,方便有踩到同样坑的朋友参考。

下面开始正文

  1. 一开始我是从数据库管理工具NavicatpgAdmin上寻找导出数据的办法,折腾一番后数据可以导出,但就是没有dmp格式的。后来经过上网查询,前辈们说PostgreSQL自带的pg dump 可以完成这个任务,但,pg dump到底是什么?在哪?怎么用?网上的大神前辈们几乎不屑去描述这些小问题,所以这是我的第一步:找到所谓的pg dump

    如果你的PC上安装了PostgreSQL,请找到你的安装目录,然后在安装目录下找到bin目录,仔细找找看,是不是有个可执行文件叫pg_dump.exe呢?别忙点开它,不是直接双击来用它。
    我的Windows 10系统下,所述路径为:C:\Program Files\PostgreSQL\9.6\bin,切合你自己的实际系统环境,找一找吧。

  2. pg dump找到了,现在的问题是怎么去执行它,网上的资料说用命令行。

    我试过用PostgreSQL自带的SQL Shell,在里面键入命令去执行,但是不行。原因可能是pg_dump是可执行程序,在sql shell下不能用(大牛别笑,像我们这些菜鸟真的不懂)
    后来想到了用Windows的cmd去执行,然而这才是正确方法。

  3. 打开cmd,键入正确的路径,运行pg_dump.exe可执行文件,命令如下,各位根据自己系统环境路径自行尝试

    C:\Users\Windows10>cd C:\Program Files\PostgreSQL\9.6\bin
    C:\Program Files\PostgreSQL\9.6\bin>pg_dump.exe
  4. 坑一:执行步骤3以后,cmd报错如下:

    C:\Program Files\PostgreSQL\9.6\bin>pg_dump.exe
    口令:
    

    这个口令来的突然,哪里的口令?数据库连接密码?Windows登陆密码?在尝试了各种密码后,cmd报了N种错误……

    pg_dump: [归档 (db)] 与数据库 "Windows10" 联接失败: 致命错误:  用户 "Windows10" Password 认证失败
    pg_dump: [归档 (db)] 与数据库 "Windows10" 联接失败: fe_sendauth: no password supplied
    pg_dump: [归档 (db)] 与数据库 "shopDemo" 联接失败: 致命错误:  用户 "postgres" Password 认证失败
    pg_dump: [归档 (db)] 与数据库 "shopDemo" 联接失败: fe_sendauth: no password supplied

    最终解决办法:不去管这个口令是什么鬼,它其实是MD5的验证。我们找到同样在PostgreSQL安装目录下的data文件夹,里面有一个文件叫pg_hba.conf,用记事本打开它,找到最后几行,将MD5替换成trust。代码如下:

修改前的代码:

……
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            MD5
# IPv6 local connections:
host    all             all             ::1/128                 MD5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            MD5
#host    replication     postgres        ::1/128                 MD5
修改后的代码:

……
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust

5.口令的问题解决了,现在我们要开始从数据库中导出我们想要的数据了,命令如下:

C:\Program Files\PostgreSQL\9.6\bin>pg_dump -h 192.168.1.12 -p 5432 -U postgres -d shopDemo -t project_shop_girl > /project_shop_girl.dmp

/* -h:远程连接地址,如果你连接本机数据库,就不用写它 */
/* -p:端口号,同上 */
/* -U:数据库登陆用户名 */
/* -d:连接的数据库名字 */
/* -t:具体要导出哪张表 */
/* > :文件保存路径,上述代码表示要存在当前路径下 */

结果悲剧了:
C:\Program Files\PostgreSQL\9.6\bin>pg_dump -h 192.168.1.12 -p 5432 -U postgres -d shopDemo -t project_shop_girl > project_shop_girl.dmp
拒绝访问。

原因:当前路径无权访问,所以文件存不进去(觉得是Windows作的妖)
解决办法:换个路径存,最好是非系统盘,这样也好找,基本权限也足够,大不了手动再移动呗

C:\Program Files\PostgreSQL\9.6\bin>pg_dump -h 192.168.1.12 -p 5432 -U postgres -d shopDemo -t project_shop_girl > F:/project_shop_girl.dmp

6.如果在过程中报错数据库 "shopDemo" 不存在,先看看是不是粗心打错数据库名字了,又或者是没用-h定义远程数据库,访问的是你本地的127.0.0.1吧,而你本地没有该数据库。.


以上是我在工程中遇到的又一个不会的地方。遇到了、解决了,记录下来,算是又涨了些姿势。记录过程中,有些名词、文字并不规范,甚至不正确,不符合官面儿语言,但你能看懂么?能看懂就比拗口的书面语言强。解决办法不是我发明的,我也是上网借鉴各路大牛们的经验和方法,用白话加以整理和说明,因为大牛们虽然多,但是像我这样的菜鸟也不少,菜鸟间的语言,只可意会不可言传。哈哈。

最后:
感谢 https://blog.csdn.net/6rl/article/details/4667522 大牛
感谢 https://blog.csdn.net/windone0109/article/details/12748789 大牛
感谢 百度知道 的不知名 大牛

猜你喜欢

转载自blog.csdn.net/weixin_42097173/article/details/80546790