使用包管理器就可以直接安装 PostgreSQL:
sudo apt install postgresql
默认情况下,PostgreSQL 会创建一个名为postgres
的数据库超级用户以及一个同名的 Unix 用户(注意区分数据库用户和 Unix 用户的概念)。postgres
数据库用户没有密码,只有在主机上登入postgres
Unix 用户之后,才有权限登入postgres
数据库用户。psql
是 PostgreSQL 的客户端命令行工具。输入下面的命令就可以通过postgres
数据库用户来操纵数据库。
sudo -u postgres psql
然后输入以下命令,就可以创建一个名为user1
的用户和名为db1
的数据库,并赋予user1
操纵db1
的所有权限。
CREATE USER user1 WITH PASSWORD 'your_password';
CREATE DATABASE db1;
GRANT ALL PRIVILEGES ON DATABASE db1 TO user1;
\c db1 postgres
GRANT ALL ON SCHEMA public TO user1;
\q
顺带一提,可以通过pwgen
命令生成一个随机的 16 位强密码:
sudo apt install pwgen
pwgen -s 16 1
默认配置下,PostgreSQL 不允许外网连接通过密码登入数据库。下面介绍如何解除该限制。
首先编辑/etc/postgresql/*/main/postgresql.conf
(这里的*
代表 PostgreSQL 的版本号,下同),加入这一行:
listen_addresses = '*'
然后在/etc/postgresql/*/main/pg_hba.conf
中加入这一行:
host all all 0.0.0.0/0 scram-sha-256
你可以通过下面的命令快速编辑配置文件:
echo "listen_addresses = '*'" | sudo tee -a /etc/postgresql/*/main/postgresql.conf
echo "host all all 0.0.0.0/0 scram-sha-256" | sudo tee -a /etc/postgresql/*/main/pg_hba.conf
默认情况下,PostgreSQL 的数据库文件存储在/var/lib/postgresql/*/main/
下面。可以通过软链接将数据库文件迁移到别的目录。此外要注意定期备份。
输入以下命令即可启动 PostgreSQL,并设置开机自动启动:
sudo service postgresql start
sudo service postgresql enable
这里有一个坑,就是postgresql
并不是一个真实存在的 service。真正的 PostgreSQL service 名称是带版本号的。postgresql
这个 service 只不过是重定向至真正的 service 而已。因此,如果你输入sudo service postgresql status
,那么不管 PostgreSQL 有没有成功启动,你看到的状态都会是active (exited)
。要想看到真正的运行状态,就要输入:
sudo service postgresql* status