目录
[二、自动设置官方的PostgreSQL Apt仓库](#二、自动设置官方的PostgreSQL Apt仓库)
[四、检查 PostgreSQL 服务状态](#四、检查 PostgreSQL 服务状态)
[2.1 选择PostgreSQL连接](#2.1 选择PostgreSQL连接)
[2.2 填入上面创建的IP,DataBase,用户密码](#2.2 填入上面创建的IP,DataBase,用户密码)
[2.3 测试连接成功](#2.3 测试连接成功)
[1、核心内存配置 postgresql.conf](#1、核心内存配置 postgresql.conf)
[2、利用 PostgreSQL 18 新特性:异步 I/O 配置](#2、利用 PostgreSQL 18 新特性:异步 I/O 配置)
Ubuntu24.04(2核8G)
PostgreSQL18
Dbeaver
一、更新软件源
bash
sudo apt update
sudo apt upgrade -y
二、自动设置官方的PostgreSQL Apt仓库
bash
sudo apt install -y postgresql-common ca-certificates
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

三、更新软件包列表并安装PostgreSQL
bash
sudo apt update
sudo apt install postgresql-18 postgresql-contrib-18

四、检查 PostgreSQL 服务状态
bash
sudo systemctl status postgresql
# 设置开机自启
sudo systemctl enable postgresql

五、创建用户数据库
1、登录PostgreSQL
bash
sudo -i -u postgres
psql

2、创建用户shenyw
bash
CREATE USER shenyw WITH PASSWORD 'shenyw';
# 赋权
ALTER USER shenyw WITH SUPERUSER;

3、创建DATABASE
bash
CREATE DATABASE syw;
# 赋权
GRANT ALL PRIVILEGES ON DATABASE syw to shenyw;

4、查看用户与数据库
bash
# 查看数据库
\l
# 查看用户
\du

六、修改配置文件
1、postgresql.conf
bash
sudo vim /etc/postgresql/18/main/postgresql.conf
# 监听所有地址 (可以按/输入listen搜索定位)
listen_addresses = '*'

2、pg_hba.conf
bash
sudo vim /etc/postgresql/18/main/pg_hba.conf
bash
# 允许所有 IP 使用密码连接
host all all 0.0.0.0/0 scram-sha-256
# 或者限制特定网段
host all all 192.168.36.0/24 scram-sha-256

3、重启服务
bash
sudo systemctl restart postgresql
七、远程连接测试
1、查看服务器IP
192.168.36.132

2、Dbeaver连接测试
2.1 选择PostgreSQL连接

2.2 填入上面创建的IP,DataBase,用户密码

2.3 测试连接成功

八、安装插件
sql
# 三元词组,它让你的数据库具备了"模糊匹配"的能力。
# 比如,即使用户搜索时拼写有误(如搜索 "Middlesborough" 来查找 "Middlesbrough"),它也能根据字符串的相似度找到正确结果。
CREATE EXTENSION IF NOT EXISTS pg_trgm;
# 提供函数来生成 UUID(通用唯一标识符)
# 这是一种 128 位的标识符,非常适合用作主键,因为它可以在分布式系统中保证唯一性,且不易被猜测。
CREATE EXTENSION IF NOT EXISTS uuid-ossp;
# 提供了多种加密函数、哈希算法(如 MD5, SHA, bcrypt)以及随机数生成器。
# 常用于密码安全存储、数据脱敏等。
CREATE EXTENSION IF NOT EXISTS pgcrypto;
# 实现了一种"键值对"的数据类型,允许你在单个字段中存储一组键值对。
# 适合存储非结构化或稀疏属性的数据,而无需频繁修改表结构。
CREATE EXTENSION IF NOT EXISTS hstore;
# 空间地理,它将你的普通数据库升级为"空间数据库"
# 可以直接存储和查询经纬度、路线、多边形等地理信息数据。你可以用它来计算两点之间的距离、查找某个区域内的所有点,或进行复杂的地理空间分析。
CREATE EXTENSION IF NOT EXISTS postgis;
PostGIS安装注意
uuid-ossp、pgcrypto、hstore 等扩展,通常是 PostgreSQL 自带的核心贡献包(contrib),一般在安装数据库时就会包含。但 PostGIS 是一个第三方扩展,需要独立安装。

在操作系统层面安装 PostGIS 软件包;
首先,你需要使用系统的包管理器(如
apt)将 PostGIS 安装到你的 Ubuntu 系统中。这个步骤会为你的 PostgreSQL 数据库准备好扩展的"控制文件"和"程序文件"。
打开终端,执行以下命令:
bash
# 安装 PostGIS 扩展包
# 注意:包名中的 '18' 需要替换为你实际的 PostgreSQL 主版本号
sudo apt install postgresql-18-postgis
再次在Dbeaver中尝试安装PostGIS插件,安装成功;
sql
CREATE EXTENSION IF NOT EXISTS postgis;

💡 版本匹配是关键:PostgreSQL 的主版本号必须与 PostGIS 包名中的版本号严格一致。
例如,如果你安装的是 PostgreSQL 15,那么就应该安装 postgresql-15-postgis 。你可以通过 sudo -u postgres psql -c "SELECT version();" 命令来查看你的 PostgreSQL 具体版本。
九、性能调优
Ubuntu24.04(2核8G)
PostgreSQL18
在这个配置下,性能优化的核心思路是:最大化内存利用效率,并谨慎利用 PostgreSQL 18 的新特性,避免因资源争抢导致性能下降。
方法一:使用 SQL 命令(推荐,修改后需重启)
sql
-- 核心内存配置 (基于2核8G环境)
ALTER SYSTEM SET shared_buffers = '2GB';
ALTER SYSTEM SET effective_cache_size = '4GB';
ALTER SYSTEM SET work_mem = '32MB';
ALTER SYSTEM SET maintenance_work_mem = '1GB';
ALTER SYSTEM SET wal_buffers = '16MB';
ALTER SYSTEM SET temp_buffers = '128MB';
-- 异步 I/O 相关配置 (PostgreSQL 18 新增)
ALTER SYSTEM SET io_method = 'worker'; -- 保持默认即可
ALTER SYSTEM SET io_workers = '2'; -- 2核环境建议从2开始
ALTER SYSTEM SET effective_io_concurrency = '16'; -- SSD 磁盘优化
ALTER SYSTEM SET maintenance_io_concurrency = '16'; -- SSD 磁盘优化
bash
# 修改完成后,需要重启数据库服务使配置生效:
sudo systemctl restart postgresql
sql
-- 查看单个参数
SHOW shared_buffers;
SHOW effective_cache_size;
SHOW work_mem;
SHOW maintenance_work_mem;
SHOW wal_buffers;
SHOW temp_buffers;
SHOW io_method;
SHOW io_workers;
SHOW effective_io_concurrency;
SHOW maintenance_io_concurrency;
方法二:直接编辑文件
如果你更喜欢编辑文件,配置文件通常位于
/etc/postgresql/18/main/postgresql.conf。直接用vim打开,找到对应参数进行修改,并去掉行首的注释符号#
⚙️参数说明
1、核心内存配置 postgresql.conf
内存是数据库性能的基础,对于8GB内存的服务器,我们需要为操作系统和其他进程留出余地,通常分配给 PostgreSQL 专用的内存约为 5-6 GB。以下是核心参数的配置建议:
| 配置参数 | 推荐值 (约5-6GB) | 配置说明与理由 |
|---|---|---|
shared_buffers |
2GB - 3GB | PostgreSQL 的共享缓冲区,用于缓存数据。建议设置为总内存的 25%-40% 。对于8GB内存,2-3GB是一个安全的起始范围。 |
effective_cache_size |
4GB - 6GB | 告诉查询规划器操作系统文件系统缓存的大小,影响是否使用索引的决策。建议设置为总内存的 50%-75% 。此值仅是估算,不实际分配内存,设高一点有助于优化器选择索引。 |
work_mem |
16MB - 32MB | 每个查询操作(如排序、哈希)可使用的内存。计算公式需谨慎:最大并发查询数 × 每个查询的操作数 × work_mem 不应超过可用内存 。保守设置是安全的,因为复杂查询会消耗更多。 |
maintenance_work_mem |
512MB - 1GB | 用于维护任务(如 VACUUM、CREATE INDEX)的内存。可以设得比 work_mem 高,因为这类任务并发数少 。 |
wal_buffers |
16MB | WAL(预写式日志)缓冲区。对于8GB内存,16MB是一个合理值,可以减少高写入负载时的磁盘I/O 。 |
temp_buffers |
64MB - 128MB | 每个会话用于临时表的缓冲区。如果应用大量使用临时表,可以适当增加 。 |
2、利用 PostgreSQL 18 新特性:异步 I/O 配置
PostgreSQL 18 引入了异步 I/O 子系统,旨在更好地利用现代存储性能 。在2核环境中,我们需要谨慎配置以避免资源争抢。
-
io_method:建议设置为worker(默认值)。worker模式使用专用的 I/O 工作进程,适合大多数场景 。如果你的 Linux 内核版本较新(5.1+)且存储设备(如 NVMe SSD)性能强劲,可以尝试io_uring以获得更低延迟,但务必先进行充分测试 。 -
io_workers:建议设置为 2 - 4。这个参数定义了异步 I/O 工作进程的数量。在只有2个CPU核心的环境下,设置过多的 worker(如默认的3个可能已足够,但增加到6或8)会导致 CPU 上下文切换过于频繁,反而可能引发性能下降,这一点已有实际测试佐证 。从2开始,根据监控逐步增加是更稳妥的策略。 -
io_combine_limit:保持默认的 16 (128kB) 或略有增加。此参数控制合并相邻 I/O 请求的大小。对于 OLTP 类型的小查询,过大的合并会造成延迟;对于分析型的大查询,可以适当增加以提高吞吐量 。 -
effective_io_concurrency和maintenance_io_concurrency:这两个参数控制查询和VACUUM等维护操作可以发起的并发 I/O 请求数。对于支持并行 I/O 的固态硬盘,可以将它们都设置为 16 或更高 。
3、验证与监控
调整完配置后,需要验证效果并持续观察。
-
重启并验证:重启 PostgreSQL 服务。
-
监控 I/O :利用 PostgreSQL 18 新增的视图
pg_stat_io来观察异步 I/O 的实际工作情况 。 -
分析慢查询 :确保已启用
pg_stat_statements扩展,它能帮助你定位最耗时的查询,从而进行针对性优化 。 -
循序渐进:每次只修改一组相关的参数(如先调内存,再调 I/O),观察系统性能变化,避免一次性改动过多导致问题难以定位 。
💡 总结建议
对于2核8GB的 PostgreSQL 18 环境,我的最终建议是:
内存为王 :先按照上表精确配置好
shared_buffers和work_mem等内存参数,这是最基础的优化。I/O 特性谨慎用 :PG18 的异步 I/O 很有吸引力,但在这个配置下,从
io_method = worker和io_workers = 2开始,在确认系统稳定后,再逐步尝试增加 worker 数量或切换到io_uring。除了上面提到的,禁用 THP 和配置大页是投入产出比非常高的系统级优化;