【PostgreSQL】pg各版本选用取舍逻辑与docker安装postgres:15

2025-08-21 03:24:00 世界杯经典歌曲

企业常用 PostgreSQL 版本推荐

1. PostgreSQL 14(最常见,稳定)

目前许多企业仍在使用 PostgreSQL 14,因为它在性能、并发处理、JSON 支持等方面做了较多优化,同时又非常稳定。

官方支持时间 :2026 年 11 月 之前提供更新和安全修复。

适用于:大多数企业生产环境。

2. PostgreSQL 15(新特性但较新)

提供更好的 MERGE 语句支持(类似 SQL Server 的 UPSERT),性能优化更强。

适用于愿意升级到较新版本,但又不想冒 PostgreSQL 16 可能存在的新版本风险的企业。

官方支持时间 :2027 年 11 月。

3. PostgreSQL 13(部分老企业仍在使用)

仍然有许多老企业使用 PostgreSQL 13,因为它稳定,且比 12 版本有更好的 JSON 处理能力和查询优化。

官方支持时间 :2025 年 11 月。

适用于:已有 PostgreSQL 13 生产环境的企业,短期内不会升级。

4. PostgreSQL 16(最新,但企业少用)

2023 年 9 月发布,优化了查询并行性、工作负载管理,但因为较新,企业采用率还不高。

适用于:希望使用最新特性的企业,但不适用于保守的生产环境。

企业推荐版本总结

版本

适用场景

官方支持时间

企业使用率

PostgreSQL 14

最佳选择,稳定,性能好

2026 年 11 月

⭐⭐⭐⭐⭐

PostgreSQL 15

适合需要新功能但不想冒险

2027 年 11 月

⭐⭐⭐⭐

PostgreSQL 13

兼容性好,部分企业仍用

2025 年 11 月

⭐⭐⭐

PostgreSQL 16

最新,但企业采用较少

2028 年 11 月

⭐⭐

企业中常用的 PostgreSQL 镜像类型

在 docker pull PostgreSQL 镜像时,常见的选择有:

postgres:latest(最新稳定版)

postgres:<版本号> (指定版本,例如 postgres:14)

postgres:<版本号>-alpine (轻量级 Alpine 版本,例如 postgres:14-alpine)

1. Alpine 版(postgres:<版本>-alpine)

Alpine 镜像是什么?

-alpine 版本基于 Alpine Linux,它是一个极小的 Linux 发行版(基础镜像通常只有 5MB 左右)。例如:

sh

复制代码

docker pull postgres:14-alpine

与标准版 postgres:14 相比:

体积更小 (Alpine 版本约 20MB,标准版约 200MB+)

启动更快,但功能有所取舍

Alpine 版会缺少什么?

缺少 GNU 库(glibc) :Alpine 使用 musl 和 busybox,一些依赖 glibc 的应用可能无法运行。

某些扩展不兼容 :

一些 PostgreSQL 插件(如 postgis)可能无法直接安装,需要手动编译。

可能缺少一些 libpq 相关的工具(可以通过 apk add postgresql-client 安装)。

性能略有下降 :

由于 Alpine 采用 musl 而不是 glibc,某些高并发/高负载场景下的数据库操作可能比标准版稍慢(但差距不大)。

2. 企业环境应该选择哪种镜像?

镜像版本

体积

适用场景

是否推荐企业使用

postgres:latest

大(约 200MB+)

开发/测试/生产

✅ 推荐

postgres:14

大(约 200MB+)

企业生产环境(稳定)

✅ 强烈推荐

postgres:14-alpine

小(约 20MB)

轻量化部署,资源受限环境(如 IoT)

⚠️ 不推荐用于企业生产

postgres:14-slim

适中(约 50MB)

一般生产环境,无需扩展支持

✅ 可选

postgres:14-bullseye

适中

需要 Debian 兼容环境

✅ 推荐(更兼容)

企业生产环境建议使用 postgres:14 或 postgres:14-slim,因为它们兼容性更好,功能完整。

3. 什么时候适合用 Alpine 版?

✅ 适用场景:

资源受限的 小型应用,如嵌入式设备、CI/CD 测试环境、Docker Swarm、Kubernetes 轻量化部署。

你确定你的应用 不依赖 PostgreSQL 扩展 (如 postgis)。

需要 极小的镜像,减少带宽和存储占用。

❌ 不适用场景:

生产环境(特别是企业级数据库,稳定性比大小更重要)。

需要 复杂插件支持 ,如 postgis、plpython 等。

高负载 的 OLTP/OLAP 系统(可能因 musl 影响而性能略有下降)。

适用于学习场景的pgsql选用----ubuntu22.04

1. 拉取 postgres:15 镜像

sh

复制代码

docker pull postgres:15

2. 运行 PostgreSQL 15(Slim 版)

sh

复制代码

docker run -d \

--name my_postgres \

-e POSTGRES_USER=root \

-e POSTGRES_PASSWORD=123456 \

-e POSTGRES_DB=db \

-p 5432:5432 \

-v pg_data:/var/lib/postgresql/data \

postgres:15

连接方式:

sh

复制代码

docker exec -it my_postgres psql -U root -d db

-v pg_data:/var/lib/postgresql/data 参数理解

位置

作用

pg_data

宿主机上的 Docker 容器卷 (实际存储 PostgreSQL 数据)通常是/var/lib/docker/volumes/pg_data/

/var/lib/postgresql/data

容器内部的数据库存储目录

-v pg_data:/var/lib/postgresql/data

将容器卷 pg_data 绑定到容器 /var/lib/postgresql/data,实现数据持久化,确保在你docker因为某原因关了之后能在docker的卷里pg_data找到备份

一般在linux中,先用docker volume inspect找到容器卷的挂载点

bash

复制代码

docker volume inspect pg_data

输出类似

json

复制代码

[

{

"Name": "pg_data",

"Driver": "local",

"Mountpoint": "/var/lib/docker/volumes/pg_data/_data",

"Scope": "local"

}

]

Mountpoint 指向 /var/lib/docker/volumes/pg_data/_data,这说明 真实的数据存放在宿主机的这个目录中。

可以用ls查看是否有数据,

复制代码

ls /var/lib/docker/volumes/pg_data/_data

https://github.com/0voice