Ubuntu 20.04 安装 PostgreSQL
写于 2021-10-19 请注意实效性。
毕竟我也不是专业运维,一直以来服务器上都用宝塔面板偷懒,直到决定换成更现代化的数据库——PostgreSQL。与 MySQL 形成鲜明对比,宝塔对 PgSQL 的支持简直就是一坨💩。先罗列一下基本罪状:
其中部分已经有人反馈,也被官方收录,但就是不修。无奈,还是老老实实自己安装。
本文没什么技术含量,随意记录一下而已。
安装
Ubuntu 官方仓库已经收录了 PostgreSQL,但是每个系统版本都绑定了一个特定的 PG 版本,无法手动选择。Ubuntu 20.04 绑定的是 PG 12.8 正好符合需求。如果不符合,去看看 PG 的文档添加一个源就好了。
安装非常简单,甚至比宝塔还简单。
sudo apt update
sudo apt install postgresql postgresql-contrib
其中 postgresql-contrib
是第三方贡献的额外代码,一些实用工具之类的,一并装上吧。
完成后执行下面命令检查安装情况与版本号:
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
原因已经写的很清楚了,那我们就来手动修复一下。执行
sudo mkdir /home/postgres
sudo chown postgres:postgres /home/postgres
这样就可以成功切换过去了。也可以 sudo -u postgres psql
切换或直接执行命令。
创建新角色与数据库
sudo -u postgres createuser --interactive
执行上面的命令来交互式地创建新角色,很傻瓜化。
然后再来创建一个数据库:
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
需要注意的是这里的「授权」仅仅指的是登录,而不是真正对资源进行鉴权。即使登录了,并不代表其中的资源就可以任意访问。
最后需要重启一下服务来生效:
sudo systemctl restart postgresql
记得放开防火墙~