企业常用 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
安装)。
- 一些 PostgreSQL 插件(如
- 性能略有下降 :
- 由于 Alpine 采用
musl
而不是glibc
,某些高并发/高负载场景下的数据库操作可能比标准版稍慢(但差距不大)。
- 由于 Alpine 采用
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