Debian 系统上配置 PostgreSQL
📦 第一步:安装 PostgreSQL
在 Debian 上,最简单的安装方式是使用其官方软件源。
- 更新软件包列表:
sudo apt update - 安装 PostgreSQL:
建议一并安装postgresql-contrib,它包含了一些实用的扩展和工具。sudo apt install postgresql postgresql-contrib - 验证服务状态:
安装完成后,PostgreSQL 服务会自动启动并设置为开机自启。你可以通过以下命令确认其运行状态:sudo systemctl status postgresql
👤 第二步:初次访问与用户管理
PostgreSQL 在 Debian 上默认使用 “peer” 身份验证,这意味着本地连接时,数据库用户名需要与你的 Linux 系统用户名一致。因此,初次配置需要切换到默认的 postgres 系统用户进行操作。
- 切换到
postgres用户并进入psql:
成功进入后,命令提示符会变为sudo -i -u postgres psqlpostgres=#。 - 设置
postgres用户的密码(可选,但推荐):
虽然本地peer认证不需要密码,但设置密码对于后续远程连接或使用密码认证方式很有必要。ALTER USER postgres WITH PASSWORD '你的强密码'; - 创建新用户和数据库:
出于安全和管理的考虑,不建议直接使用postgres超级用户来运行你的应用。最佳实践是创建一个专属的用户和数据库。-- 创建一个新用户并设置密码 CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword'; -- 创建一个新数据库,并指定所有者为刚才创建的用户 CREATE DATABASE mydatabase OWNER myuser; -- (可选)如果你希望该用户能在此数据库中进行所有操作,可以授予全部权限 GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser; - 退出
psql:\q
🔧 第三步:配置客户端认证(可选,但关键)
pg_hba.conf 文件决定了谁、以何种方式可以连接到数据库。它位于 /etc/postgresql/<版本号>/main/ 目录下。你可以使用 psql --version 查看你的 PostgreSQL 版本,或者通过 ls /etc/postgresql/ 来确认目录名。
- 编辑认证文件:
sudo nano /etc/postgresql/<版本号>/main/pg_hba.conf - 了解默认规则:
在文件末尾附近,你通常会看到类似下面的规则。peer表示本地连接依赖系统用户名,md5或scram-sha-256表示需要密码。
解释:这意味着通过 Unix socket 的本地连接(# TYPE DATABASE USER ADDRESS METHOD local all all peer host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256local)使用peer认证,而通过 TCP/IP 的本地连接(host ... 127.0.0.1/32)需要密码。 - 根据你的需求修改:
- 场景一:希望
myuser通过密码在本地连接:确保host all all 127.0.0.1/32 scram-sha-256这行规则存在即可,无需额外修改。 - 场景二:允许所有 IP 远程连接(请谨慎评估安全风险):可以添加一行规则。
host all all 0.0.0.0/0 scram-sha-256 - 场景三:简化本地连接(仅限测试环境):如果你在本地开发,不想每次输入密码,可以将
local行的peer改为trust。警告:这会允许任何本地系统用户无密码连接数据库。local all all trust
- 场景一:希望
- 重新加载配置:
修改完成后,需要通知 PostgreSQL 重新读取配置,而无需重启服务。sudo systemctl reload postgresql
🌐 第四步:(可选)允许远程访问
如果你需要从其他机器连接此数据库,除了修改 pg_hba.conf 外,还需要让 PostgreSQL 监听外部网络接口。
- 编辑主配置文件:
sudo nano /etc/postgresql/<版本号>/main/postgresql.conf - 修改监听地址:
找到#listen_addresses = 'localhost'这一行,将其修改为:
注意:这会监听所有网络接口。在生产环境中,建议将其设置为服务器具体的 IP 地址以提高安全性。listen_addresses = '*' - 重启服务使配置生效:
sudo systemctl restart postgresql - 配置防火墙(如果启用了
ufw):
允许 PostgreSQL 的默认端口5432的流量通过。sudo ufw allow 5432/tcp
✅ 第五步:测试连接
配置完成后,进行连接测试是验证一切是否正常的关键一步。
-
从本地连接(使用密码认证):
使用-h参数指定通过 TCP/IP 连接,这会触发密码认证。psql -h localhost -U myuser -d mydatabase系统会提示你输入
myuser的密码,输入正确后即可进入mydatabase的命令行。 -
从远程机器连接:
在任何安装了postgresql-client的机器上,将localhost替换为服务器的 IP 地址。psql -h 你的服务器IP -U myuser -d mydatabase
如果在连接过程中遇到问题,可以首先检查 PostgreSQL 服务的运行状态 (sudo systemctl status postgresql) 以及 /var/log/postgresql/ 目录下的日志文件以获取详细的错误信息。
- 点赞
- 收藏
- 关注作者
评论(0)