環境如下:
- 宿主機為Windows 11
- postgreSQL安裝在宿主機上的Linux虛機中,Hypervisor是VirtualBox
- pgAdmin 4 已安裝在宿主機上
本文講述:如何通過宿主機上的pgAdmin 連接到虛擬機中的PG。
設置監聽
默認的PG監聽主機為localhost,外部無法連接。
postgres=# show listen_addresses;listen_addresses
------------------localhost
(1 row)
因此第一步需要修改監聽。此設置在文件$PGDATA/postgresql.conf中:
listen_addresses = '*' # what IP address(es) to listen on;
#listen_addresses = 'localhost' # what IP address(es) to listen on;# comma-separated list of addresses;# defaults to 'localhost'; use '*' for all# (change requires restart)
如何修改,已經需要重啟,在注釋中已經說的很清楚。
重啟PG:
$ pg_ctl restart
確認:
postgres=# show listen_addresses;listen_addresses
------------------*
(1 row)
OS層面確認:
$ netstat -an|grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
...
netstat命令的安裝(若不存在):
# 查詢netstat所在的包
yum whatprovides */netstat
yum install net-tools
設置端口轉發
就是映射宿主機的端口5432到虛擬機中PG的監聽端口5432。
可以每次在VirtualBox中改,不過建議在Vagrantfile中永久修改。在Vagrantfile中添加以下,然后重啟虛機:
config.vm.network "forwarded_port", guest: 5432, host: 5432
在VirtualBox中確認:
設置HBA
修改pg_hba.conf如下,關鍵是最后一行:
$ cat pg_hba.conf
...
local all postgres peer
local all +athlethes,xiaoyu md5
host all postgres,lewis 0.0.0.0/0 md5
...$ pg_ctl reload
實際上從虛機的登錄信息,可以得知宿主機的地址為10.0.2.2,因此0.0.0.0/0
也可以改為10.0.2.2
。
Using username "vagrant".
Authenticating with public key "vagrant"Welcome to Oracle Linux Server release 9.5 (GNU/Linux 5.15.0-206.153.7.el8uek.x8 6_64)The Oracle Linux End-User License Agreement can be viewed here:* /usr/share/eula/eula.en_USFor additional packages, updates, documentation and community help, see:* https://yum.oracle.com/Last login: Tue Jun 17 01:37:21 2025 from 10.0.2.2
pgAdmin的設置
以下是連接成功的界面:
General設置:
Connection設置:
Parameters設置:
注意,如果用postgres連接,我是不知道其口令的,因此我在PG中預先修改了口令:
ALTER USER postgres WITH PASSWORD 'new_password';