Ubuntu24.04 安装 PostgreSQL18,配置远程连接,安装常用插件,以及性能调优

目录

一、更新软件源

[二、自动设置官方的PostgreSQL Apt仓库](#二、自动设置官方的PostgreSQL Apt仓库)

三、更新软件包列表并安装PostgreSQL

[四、检查 PostgreSQL 服务状态](#四、检查 PostgreSQL 服务状态)

五、创建用户数据库

1、登录PostgreSQL

2、创建用户shenyw

3、创建DATABASE

4、查看用户与数据库

六、修改配置文件

1、postgresql.conf

2、pg_hba.conf

3、重启服务

七、远程连接测试

1、查看服务器IP

2、Dbeaver连接测试

[2.1 选择PostgreSQL连接](#2.1 选择PostgreSQL连接)

[2.2 填入上面创建的IP,DataBase,用户密码](#2.2 填入上面创建的IP,DataBase,用户密码)

[2.3 测试连接成功](#2.3 测试连接成功)

八、安装插件

PostGIS安装注意

九、性能调优

⚙️参数说明

[1、核心内存配置 postgresql.conf](#1、核心内存配置 postgresql.conf)

[2、利用 PostgreSQL 18 新特性:异步 I/O 配置](#2、利用 PostgreSQL 18 新特性:异步 I/O 配置)

3、验证与监控


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 用于维护任务(如 VACUUMCREATE 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_concurrencymaintenance_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 环境,我的最终建议是:

  1. 内存为王 :先按照上表精确配置好 shared_bufferswork_mem 等内存参数,这是最基础的优化。

  2. I/O 特性谨慎用 :PG18 的异步 I/O 很有吸引力,但在这个配置下,从 io_method = workerio_workers = 2 开始,在确认系统稳定后,再逐步尝试增加 worker 数量或切换到 io_uring

  3. 除了上面提到的,禁用 THP配置大页是投入产出比非常高的系统级优化;

相关推荐
Allen_LVyingbo2 小时前
PostgreSQL动态分区裁剪技术:查询性能优化解析(2026年版)
数据库·算法·观察者模式·postgresql·性能优化·架构
委婉待续3 小时前
关于ubuntu开机进入recovering journal的解决方法
linux·运维·ubuntu
项目工程打工马3 小时前
Ubuntu 上 Nginx 安装详细指南(新手零踩坑版)
nginx·ubuntu·postgresql
徒 花3 小时前
Docker在Ubuntu上的安装及配置(基于k8s基础环境配置)
ubuntu·docker·kubernetes
酿情师14 小时前
Windows Subsystem for Linux (WSL, Ubuntu)安装教程(详细)
linux·windows·ubuntu
djarmy16 小时前
ubuntu20.04搭建openharmony6.0的master分支。构建编译环境报错解决记录
c语言·ubuntu
supersolon16 小时前
Windows下WSL(Ubuntu24.04)安装Nodejs
linux·ubuntu·node.js
IvorySQL18 小时前
PostgreSQL 技术日报 (3月14日)|AI 落地 PostgreSQL 拒绝 PPT 空谈
数据库·postgresql·开源
如若12319 小时前
WSL2安装Ubuntu完整教程:自定义安装目录到D盘(--location一键搞定)
linux·运维·服务器·pytorch·python·ubuntu·计算机视觉