Ubuntu 20.04 安装 PostgreSQL

写于 2021-10-19 请注意实效性。

毕竟我也不是专业运维,一直以来服务器上都用宝塔面板偷懒,直到决定换成更现代化的数据库——PostgreSQL。与 MySQL 形成鲜明对比,宝塔对 PgSQL 的支持简直就是一坨💩。先罗列一下基本罪状:

  1. 安装后无法重启服务
  2. 创建数据库后实际上并没有创建
  3. 删除数据库不会删除关联的用户。
  4. ……

其中部分已经有人反馈,也被官方收录,但就是不修。无奈,还是老老实实自己安装。

本文没什么技术含量,随意记录一下而已。


安装

Ubuntu 官方仓库已经收录了 PostgreSQL,但是每个系统版本都绑定了一个特定的 PG 版本,无法手动选择。Ubuntu 20.04 绑定的是 PG 12.8 正好符合需求。如果不符合,去看看 PG 的文档添加一个源就好了。

安装非常简单,甚至比宝塔还简单。

1
2
sudo apt update
sudo apt install postgresql postgresql-contrib

其中 postgresql-contrib 是第三方贡献的额外代码,一些实用工具之类的,一并装上吧。

完成后执行下面命令检查安装情况与版本号:

1
sudo -u postgres psql -c "SELECT version();"

连接 PG

默认情况下 PG 会创建一个名为 postgres 的角色(也就是用户),并且与系统同名账户关联。使用此账户可以直接登录数据库。那么理论上,执行 sudo -i -u postgres 就可以切换。

然而…

sudo: unable to change directory to /home/postgres: No such file or directory
sudo: unable to execute /bin/sh: No such file or directory

原因已经写的很清楚了,那我们就来手动修复一下。执行

1
2
sudo mkdir /home/postgres
sudo chown postgres:postgres /home/postgres

这样就可以成功切换过去了。也可以 sudo -u postgres psql 切换或直接执行命令。

创建新角色与数据库

1
sudo -u postgres createuser --interactive

执行上面的命令来交互式地创建新角色,很傻瓜化。

然后再来创建一个数据库:

1
sudo -u postgres createdb your-db-name

开启远程访问

⚠️ 这么做很危险

和 MySql 不同,PG 不仅需要监听所有地址,还得改一下授权。

首先修改监听地址,默认应该是 /etc/postgresql/12/main/postgresql.conf。在 CONNECTIONS AND AUTHENTICATION 添加一行:

listen_addresses = '*'

然后修改授权,默认是 /etc/postgresql/12/main/pg_hba.conf。具体格式说明这里有完整的文档。如果要允许所有用户从任意 IP 使用密码登录任意数据库,添加这这一行:

host    all             all             all                 md5

需要注意的是这里的「授权」仅仅指的是登录,而不是真正对资源进行鉴权。即使登录了,并不代表其中的资源就可以任意访问。

最后需要重启一下服务来生效:

1
sudo systemctl restart postgresql

记得放开防火墙~

禁止转载到私域(公众号,非自己托管的博客等),其他情况请注明原作者与可点击跳转的来源链接。