一、問題現象:
在湖南麒麟3.2系統中,使用PgAdmin使用localhost 連接本機安裝的數據庫,連接失敗,但使用127.0.0.1連接成功。
二、解決方法
根據錯誤提示圖,是指pg_hba.conf配置文件中不允許IPv6回環地址訪問數據庫,所以修改配置文件如下:
三、問題解決
1)檢查postgresql的pg_hba.conf配置文件,如下:
根據文件,可以確認127.0.0.1肯定是可以連接成功的。需要確認的是在用localhost的連接時,實際映射的ip是什么?
2)確認localhost對應的ip地址
方法一:(簡單可靠)
執行ping localhost
,看打印信息
方法二:
linux下查看/etc/hosts文件,查看ip和地址的映射關系
windows下查看C:\Windows\System32\drivers\etc\hosts文件。
方法三:
linux下ifconfig -a,可以本機回環地址。
可以知道所用的麒麟系統,localhost對應的ip地址為:****
3)再次確認pg數據庫的配置
明確localhost對應的IP地址后,再次檢查pg_hba.conf文件,發現
#host all all ::1/128 md5
,即不允許ipV6訪問,所以找到問題的根源了,將本行的注釋符號去掉,然后重啟postgresql即可。
4)測試
pgsql -h localhost -u smartsys -d smartsys0714,連接成功。
四、擴展
遇到這個問題,第一反應沒有想到是哪里的原因。理所當然的認為localhost就是127.0.0.1,忽略了IPV6。所以對ipV4、ipV6、localhost等概念更系統的學習了一下。
1)IPV4
IPV4:Internet Protocol version 4,網際協議第4版,ipV4采用32位2進制位表示地址,所以共可以表示2^32個地址,IPv4通常用點分十進制記法書寫,例如192.168.0.1,其中的數字都是十進制的數字,中間用實心圓點分隔。一個IPv4地址可以分為網絡地址和主機地址兩部分,其中網絡地址可以使用如下形式描述:192.168.0.0/16,其中斜線后的數字表示網絡地址部分的長度是16位,這對應2個字節,即網絡地址部分是192.168.0.0。
2)IPV6
IPV6:Internet Protocol version 6,網際協議第6版,IPV6采用128位2進制位表示地址,所以共可以表示2^128個地址。IPv6有3種表示方法:1)冒分十六進制表示法;2)0位壓縮表示法;3)內嵌IPV4地址表示法,這里不詳細介紹。
3)localhost
localhost指"本地主機",指"這台計算機"。localhost是回路網絡接口(loopback)的一個標准主機名,相對應的IP地址為127.0.0.1(IPv4)和[::1](IPv6)。IP與localhost的對應關系可以修改。
4)回環地址
IPv6中的環回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。環回與IPv4中的127.0.0.1作用相同,主要用於設備給自己發送報文。