侧边栏壁纸
  • 累计撰写 56 篇文章
  • 累计创建 14 个标签
  • 累计收到 14 条评论

目 录CONTENT

文章目录

Ubuntu安装PostgreSQL后进行基本配置

Ywxmz
2026-07-22 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

一、前言

基本的Ubuntu如何安装PostgreSQL此处不再赘述,如果需要安装PostgreSQL,可以自己看下官方的安装文档,写的已经比较全面了。地址我这里贴在下方。根据自己的操作系统选择,然后执行命令即可。

PostgreSQL:下载

二、设置初始密码

我这里安装的版本为18版本的PostgreSQL,不同版本的命令可能有略微的不同。

sudo -u postgres psql -c "ALTER USER postgres PASSWORD '你的强密码';"

三、基本配置

1.开启防火墙端口

我这里需要将PostgreSQL放到外网链接,因此,需要开启防火墙的5432端口,系统是Ubuntu 26

sudo ufw allow 5432/tcp && ufw reload

2.修改监听地址

在系统中,监听的地址默认是被注释掉的,因此需要删除注释,能够让服务监听V4和V6地址。

#备份配置文件,避免中途修改错导致服务异常,注意:不同版本,命令有区别
sudo cp /etc/postgresql/18/main/postgresql.conf /etc/postgresql/18/main/postgresql.conf.bak

然后直接编辑文件

#编辑文件
vim /etc/postgresql/18/main/postgresql.conf

然后找到第60行,将前面删除,并localhost*

listen_addresses = '*'

然后ESC退出编辑,输:wq保退出

3.配置客户端认证

注意:不建议各位将管理员postgre权限设置为所有IP均可登录,我此处仅将其他用户设置为允许所有IP登录。

#首先还是备份客户端配置文件,避免因为修改错误导致服务异常,注意:不同版本,命令略有区别
sudo cp /etc/postgresql/18/main/pg_hba.conf /etc/postgresql/18/main/pg_hba.conf.bak

然后进行编辑

vim /etc/postgresql/18/main/pg_hba.conf

将配置中IPv4 local connections和IPv6 local connections修改为下方的配置

# 允许所有用户通过密码从任意 IP 访问
host    all             all             0.0.0.0/0               scram-sha-256
host    all             all             ::0/0                   scram-sha-256

注意:保留配置中的第一项,即可保留管理员账户只能本地登录。如果客户端较旧不支持 SCRAM,可将 scram-sha-256 改为 md5

然后ESC退出编辑,输:wq保退出

四、根据服务器配置,调整参数

我这里使用的服务器配置是4核8G服务器,因此,我对配置进行了调整,这样也让PostgreSQL的性能有一定的提升。

还是操作修postgresql.conf 建议操作前还是提前备份,如果你不需要备份,跳过下方命令即可。

#备份配置文件,避免中途修改错导致服务异常,注意:不同版本,命令有区别
sudo cp /etc/postgresql/18/main/postgresql.conf /etc/postgresql/18/main/postgresql.conf.bak

然后进行编辑

#编辑文件
vim /etc/postgresql/18/main/postgresql.conf

1.修改shared_buffers

在第132行,这是 PostgreSQL 专用的共享内存缓存。一般建议设置为内存的25%,我这里设置为2G,可以提高热数据缓存在内存中的概率,减少磁盘随机读,提升查询响应速度。

shared_buffers = 2GB

2.修改effective_cache_size

在第477行,告诉查询规划器“操作系统文件缓存大概有多大”。通常设为总内存的 50%~75%,8GB 的 75% 是 6GB。规划器会更准确地判断索引扫描是否比顺序扫描更划算,倾向于使用索引,从而生成更优的查询计划。

effective_cache_size = 6GB

3.修改work_mem

在第143行,每个排序、哈希操作可以使用的内存。默认 4MB 极小,稍微复杂一点的查询就会用磁盘临时文件,严重拖慢速度。这个值是 每个操作 可用的内存,一个复杂查询可能使用多个 work_mem。如果链接上限比较大,建议设置为16MB之类的,否则可能造成内存被大量占用。我这里设置的32MB,上限限定了100个链接。

work_mem = 32MB

4.修改maintenance_work_mem

在第145行,用于 VACUUMCREATE INDEXALTER TABLE 等维护操作的内存。我这里的8G服务器,我设置的512MB。能够提升索引创建速度,自动清理(autovacuum)时扫描表更快,减少维护操作对正常业务的影响。

maintenance_work_mem = 512MB

5.修改max_wal_sizemin_wal_size

在第271行和172行,max_wal_size 控制检查点之前最多产生多少 WAL 日志。默认 1GB 较小,写入频繁时会导致频繁检查点,引发 IO 尖峰。增大到 2GB 可以降低检查点频率。min_wal_size 适当调大,避免 WAL 文件被过早回收后又要立即分配。

max_wal_size = 2GB
min_wal_size = 160MB

6.修改random_page_cost

在第439行,默认 4.0 是基于传统机械硬盘的假设。现在绝大多数云服务器使用 SSD,随机读延迟极低,应设置为 1.0~1.1。

random_page_cost = 1.1

7.修改effective_io_concurrency

在第205行,对于 SSD,操作系统可以并发处理多个 I/O 请求。设为 200 能让 PostgreSQL 更积极地发出并发预读请求,加速顺序扫描和位图扫描。机械硬盘则设为 2。可以提升全表扫描和位图索引扫描的速度。

effective_io_concurrency = 200

8.修改max_parallel_workersmax_parallel_workers_per_gather

在第224行,我的服务器只有 4 个 CPU 核心,默认 max_parallel_workers 为 8 会超配,过多并行进程反而互相争抢 CPU,得不偿失。限制为 4 更合理。per_gather 保持 2 即可。

max_parallel_workers = 4
max_parallel_workers_per_gather = 2

9.修改autovacuum_max_workers

在第689行,多核心服务器可以启动更多 autovacuum 工作进程,加速表的清理和分析,防止事务 ID 回卷。4 核设置为 4 能并行处理多张表。数据库垃圾回收更及时,表膨胀更小,查询性能更稳定。

autovacuum_max_workers = 4

10.修改autovacuum_work_mem

在第146行,如果不单独设置,autovacuum 会使用 maintenance_work_mem 的值(我们设的 512MB)。但 autovacuum 同时在多个表上工作,若每个 worker 都占用 512MB 可能浪费内存。单独限制为 256MB 更稳妥。避免 autovacuum 占用过多内存,同时维持其清理效率。

autovacuum_work_mem = 256MB

11.修改huge_pages

在第134行,PostgreSQL 18 默认就是 try,但配置中注释掉了。建议显式开启 try,让系统在支持大页时自动使用。可以降低内存管理开销,减少页表条目,提高大内存场景下的性能。

huge_pages = try

12.日志与监log_min_duration_statementshared_preload_libraries

在第561行和818行,log_min_duration_statement:帮助找出低效 SQL 进行优化,生产环境非常有价值。pg_stat_statements:收集所有查询的执行统计,需要通过 CREATE EXTENSION 启用,是性能分析的利器。

五、修改后重启PostgreSQL

systemctl restart postgresql@18-main

0

评论区