PostgreSQL 诞生于1996年,是一个功能丰富的免费开源的数据库管理系统,并且支持多种操作系统。更详细的介绍可以参考:
本文介绍如何在 Windows 和 Ubuntu 上安装 PostgreSQL 并进行初步的网络配置。
下载链接可以在官网找到,即:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
下载 Windows 版本的安装包之后,并不是双击就可以安装了。但是,需要特别注意的是,一定要使用管理员权限安装,即右键单击安装文件,选择「显示更多选项」-「以管理员身份运行」。
我现在的时间是2024年12月15日,PostgreSQL 的最新版本是17.2,下面就用这个版本来演示说明。
根据我的经验,目录里有空格也是可以的,我这里直接按默认目录安装。
这步弹出了4个组件共选择:
我这里把4个全部选中。
这步是选择数据的存放目录,很重要,你可以设置自己的目录。我这里为了演示方便,直接使用默认目录。
这步是为默认的超级用户postgres
设置密码。
先记下这个密码,安装后的验证还需要用到它。
PostgreSQL 的默认端口是 5432,你可以自定义端口。为了演示方便,我直接使用默认端口。
用很多国家和地区选择,我选的是 “English, United States”, 你也可以选其他的。
这步把安装过程的一些配置汇总展示出来,可以拷贝出来备用。注意里边的
它就是 Windows 中的数据库服务名,将来会用到。
完整的文本信息抄录如下:
Installation Directory: C:\Program Files\PostgreSQL\17
Server Installation Directory: C:\Program Files\PostgreSQL\17
Data Directory: C:\Program Files\PostgreSQL\17\data
Database Port: 5432
Database Superuser: postgres
Operating System Account: NT AUTHORITY\NetworkService
Database Service: postgresql-x64-17
Command Line Tools Installation Directory: C:\Program Files\PostgreSQL\17
pgAdmin4 Installation Directory: C:\Program Files\PostgreSQL\17\pgAdmin 4
Stack Builder Installation Directory: C:\Program Files\PostgreSQL\17
Installation Log: C:\Users\iridi\AppData\Local\Temp\install-postgresql.log
注意。前面提到过需要使用管理员权限安装,如果不使用的话,安装结束后会出现警告信息:
PostgreSQL 安装好后,服务自动启动。我们可以通过 pgAdmin 使用默认账号 postgres
登录验证。
首先打开 pgAdmin 设置,展开左侧对象栏里的 Server → PostgreSQL 17,输入之前设置的密码。
如果数据库服务正常开启,成功登录后就会出现如下的界面:
数据库服务可以通过 Windows 的服务控制台(快捷键:Win + R → services.msc)开启和关闭。
至此,PostgreSQL 就在 Windows 上成功安装了。
PostgreSQL 默认只允许本机访问,如果想要局域网的其他机器也能访问到,需要编辑两个文件
编辑 ``C:\Program Files\PostgreSQL\17\data\postgresql.conf`
确保 listen_addresses = '*'
,这个在17版里默认就是如此
编辑 C:\Program Files\PostgreSQL\17\data\pg_hba.conf
在
host all all 127.0.0.1/32 scram-sha-256
之下增加一行:
host all all 192.168.0.0/24 scram-sha-256
设置防火墙设置,允许外部主机通过端口5432访问本机:
参How to Configure PostgreSQL on Windows for Remote Access by Lucas, July 12, 2024
设置好这些之后,重启 PostgreSQL 的服务,再从其他机器来访问即可,如示例:
在另一台机器上通过 psql 访问数据库的效果如下:
$ psql -h 192.168.0.110 -U postgres
Password for user postgres:
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 17.2)
WARNING: psql major version 16, server major version 17.
Some psql features might not work.
Type "help" for help.
postgres=#
在 Ubuntu 上安装 PostgreSQL 要比在 Windows 上容易得多,一条指令就搞定了:
$ sudo apt install postgresql
详细内容参这里
不过,默认的版本不是最新版,是16,但对于一般使用场景来说,也是完全够用的。
$ psql --version
psql (PostgreSQL) 16.6 (Ubuntu 16.6-0ubuntu0.24.04.1)
正常情况下,安装好后数据库服务会自动启动。我们用下面的方法检查服务状态:
$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; preset: enabled)
Active: active (exited) since Sun 2024-12-15 13:18:11 CST; 14min ago
Main PID: 8083 (code=exited, status=0/SUCCESS)
CPU: 1ms
12月 15 13:18:11 caoyipc systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
12月 15 13:18:11 caoyipc systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.
如果没有启动,可以用下面的指令启动:
$ sudo systemctl start postgresql
如果需要设置开机自动启动,可以执行下面的指令:
$ sudo systemctl enable postgresql
在确认数据库正常运行后,以用户 postgres
的身份执行 psql
$ sudo -u postgres psql
[sudo] password for caoyi:
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1))
Type "help" for help.
postgres=#
在 Linux 上的安装和 Windows 有一些不同,安装过程中没有设置超级用户 postgres 的密码,所以安装后需要设置:
postgres=# ALTER ROLE postgres PASSWORD 'Abc-1234';
ALTER ROLE
注意上面指令中的分号必不可少,表示语句结束并执行。
修改密码后退出
postgres=# \q
再登录
$ psql -h 127.0.0.1 -U postgres
Password for user postgres:
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=#
PostgreSQL 默认只允许本机访问,如果想要局域网的其他机器也能访问到,需要编辑两个文件
编辑 /etc/postgresql/16/main/postgresql.conf
将 #listen_addresses = 'localhost'
的注释取消,并改成:listen_addresses = '*'
,允许外部连接
编辑 /etc/postgresql/16/main/pg_hba.conf
将
host all all 127.0.0.1/32 scram-sha-256
改成
host all all 192.168.0.0/24 scram-sha-256
设置防火墙并重启数据库服务
$ sudo ufw allow 5432/tcp
Rules updated
Rules updated (v6)
$ sudo systemctl restart postgresql
$ sudo systemctl status postgresql
尝试连接:
从 Ubuntu 的 Terminal 连接过去
$ psql -h 192.168.0.103 -U postgres
Password for user postgres:
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=#
从 Windows 客户端连接过去
Server [localhost]: 192.168.0.103
Database [postgres]:
Port [5432]:
Username [postgres]:
用户 postgres 的口令:
psql (17.2, 服务器 16.6 (Ubuntu 16.6-0ubuntu0.24.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: 关闭, ALPN: none)
输入 "help" 来获取帮助信息.
postgres=#
参考: