首页 在Debian上使用安装PostgreSQL数据库
文章
取消

在Debian上使用安装PostgreSQL数据库

在 Debian 12 上安装 PostgreSQL 数据库,可以通过 apt 命令完成。下面是安装方法,并详细解释安装后涉及的各类文件的位置和作用,哪些是安装时生成的,哪些是运行时生成的。

一、安装 PostgreSQL

1.1 使用apt安装

1
2
sudo apt update
sudo apt install postgresql

这条命令会安装当前 Debian 12 默认的软件源中 PostgreSQL 的主版本(通常是 PostgreSQL 13、14 或 15,视当前源为准)。我在 2025.07.01 安装的时候,是15。

1.2 安装验证

APT 安装 PostgreSQL 后会自动做以下事情:

  1. 创建一个系统用户 postgres
  2. 初始化数据目录 /var/lib/postgresql/15/main
  3. 启动 PostgreSQL 服务。
  4. 创建默认数据库 postgres 和默认用户 postgres,这个用户是 postgrs 的超级用户。

可以使用以下命令查看一些与 postgres 相关的基本信息

1
2
3
4
5
6
7
8
9
10
11
12
# 查看 PostgreSQL 的版本
psql --version

# 查看 PostgreSQL 服务状态
sudo systemctl status postgresql

# 列出安装的 PostgreSQL 版本及配置路径
ls /etc/postgresql/
ls /etc/postgresql/15/main/

# 查看数据目录位置(可以在 postgresql.conf 中确认)
grep data_directory /etc/postgresql/15/main/postgresql.conf

你可以用下面命令以超级用户身份访问数据库:

1
sudo -u postgres psql

二、安装完成后文件的结构

按类型分类说明 PostgreSQL 安装后,可以关注一下涉及的部分文件及它们的路径:

2.1 🛠 可执行文件(命令行工具)

这些文件用于管理和使用 PostgreSQL:

命令说明路径
psqlPostgreSQL 的交互式终端/usr/bin/psql
createdb创建数据库/usr/bin/createdb
createuser创建用户/usr/bin/createuser
pg_ctl控制 PostgreSQL 服务/usr/lib/postgresql/15/bin/
postgres数据库主服务进程/usr/lib/postgresql/15/bin/

这些 可执行文件 都是在安装时由 APT 安装产生的。

2.2 📦 依赖文件和库文件

系统运行 PostgreSQL 所需的依赖共享库:

类型路径示例
动态库/usr/lib/x86_64-linux-gnu/libpq.so.*
支持脚本等/usr/share/postgresql/

这些文件也都在安装过程中生成,用于支持 PostgreSQL 的运行环境。

2.3 ⚙️ 配置文件

配置文件用于控制数据库的行为。

文件说明路径
postgresql.conf主配置文件/etc/postgresql/15/main/postgresql.conf
pg_hba.conf认证与访问控制/etc/postgresql/15/main/pg_hba.conf
pg_ident.conf身份映射配置/etc/postgresql/15/main/pg_ident.conf

这些文件在安装时会生成初始模板,你可以手动修改来调整数据库配置。

2.4 📁 数据库数据文件

这是 PostgreSQL 存储数据的地方(即你创建的数据库、表、索引等都在这里):

内容路径
数据文件/var/lib/postgresql/15/main/
WAL 日志同上目录内的 pg_wal 子目录

⚠️ 这些是 安装后初始化数据库时生成的,是 运行时持续写入和更新的内容

2.5 🪵 日志文件

默认 PostgreSQL 的日志写入到 systemd journal,但可以配置单独日志文件:

类型路径(默认)说明
Systemd 日志使用 journalctl -u postgresql 查看默认日志存于 systemd
文件日志/var/log/postgresql/postgresql-15-main.log如果配置了 logging_collector

如果启用日志文件功能,日志是 运行时生成和更新的

2.6 🧾 Systemd 服务配置

用于启动、停止 PostgreSQL 的服务脚本:

内容路径说明
systemd unit/lib/systemd/system/postgresql.service主服务管理单元文件
各实例配置文件/etc/systemd/system/postgresql@.service.d/可选的用户定制 service 配置

这些 systemd 配置文件是 安装时生成的,你可以用 systemctl 控制数据库。

三、账号授权示例

我们可以分别使用 PostgreSQL 提供的 CREATE ROLE 和权限控制系统 + pg_hba.conf 中的访问控制配置来实现访问权限的控制。

3.1 进入 PostgreSQL 管理终端

首先以超级用户身份进入 PostgreSQL:

1
sudo -u postgres psql

3.2 开发环境 - 创建开发账号(允许任意 IP,拥有创建数据库和所有权限)

✅ 3.2.1 目标

  • 用户名:develop
  • 密码:如 dev123
  • 允许从任意 IP 登录
  • 可创建数据库、创建表、读写任意数据

🔧 3.2.2 操作

1
2
3
4
5
6
7
8
9
10
11
-- 创建账号
CREATE ROLE develop WITH LOGIN PASSWORD 'dev123';

-- 允许创建数据库(开发用)
ALTER ROLE develop CREATEDB;

-- (可选)也允许创建角色(开发权限较大时)
-- ALTER ROLE develop CREATEROLE;

-- 授予对已有数据库的连接权限
GRANT CONNECT ON DATABASE postgres TO develop;

🌍 3.2.3 配置 pg_hba.conf 允许任意 IP 登录

编辑文件(路径一般为 /etc/postgresql/15/main/pg_hba.conf):

1
sudo vim /etc/postgresql/15/main/pg_hba.conf

添加一行:

1
host    all             develop         0.0.0.0/0               md5

0.0.0.0/0 表示任意 IP,这在开发环境中可以接受,但生产中应避免。


3.3 开发环境 - 更安全的账号(限制特定网段)

✅ 3.3.1 目标

  • 用户名:devnet
  • 限制只能从 192.168.0.0/16 网段访问
  • 其他权限与上面类似

🔧 3.3.2 操作

1
2
3
CREATE ROLE devnet WITH LOGIN PASSWORD 'devnet123';
ALTER ROLE devnet CREATEDB;
GRANT CONNECT ON DATABASE postgres TO devnet;

编辑 pg_hba.conf

1
host    all             devnet         192.168.0.0/16          md5

只允许 192.168.x.x 的机器访问。

3.4 生产环境 - 创建应用账号(最小权限原则)

✅ 3.4.1 目标

  • 用户名:app_user
  • 密码:prodpass
  • 仅能访问某一个数据库(比如 app_db
  • 在该数据库中拥有查询、插入、更新、删除权限(不能建库、删库等)

🔧 3.4.2 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 创建数据库
CREATE DATABASE app_db;

-- 创建账号
CREATE ROLE app_user WITH LOGIN PASSWORD 'prodpass';

-- 授予连接权限
GRANT CONNECT ON DATABASE app_db TO app_user;

-- 切换到数据库
\c app_db

-- 授权使用 public 模式下的表
GRANT USAGE ON SCHEMA public TO app_user;

-- 授权 DML 权限
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;

-- 如果未来有新表,确保权限自动继承(非常关键)
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;

编辑 pg_hba.conf 限制访问来源:

1
host    app_db          app_user       10.0.0.0/24             md5

10.0.0.0/24 是你生产网络段的 IP,仅允许该网段机器访问。

3.5 修改后记得重启 PostgreSQL

1
sudo systemctl reload postgresql

或者重启整个服务(通常不需要):

1
sudo systemctl restart postgresql

小结(对照表)

环境类型用户名权限访问限制
开发环境develop任意数据库,创建权限任意 IP (0.0.0.0/0)
安全开发devnet同上内网 IP 段
生产环境app_user仅访问特定库的特定表权限生产服务网段
本文由作者按照 CC BY 4.0 进行授权

MySQL 8.4.5 在 Debian 上的安装配置指南

-