国产数据库私有化部署实战:PolarDB for PostgreSQL 免费容器版踩坑记

前言:为什么要折腾这个?

最近手头有个政府项目,信创是硬指标。客户要求全栈国产化,操作系统、数据库、中间件都得是国产的。

操作系统好办,现在主流的国产 OS 基本都是免费的。但数据库这块卡住了------翻了一遍安全可靠测评的名单,达梦、人大金仓、OceanBase 这些虽然都合规,但一套几万到几十万不等的授权费,对于预算有限的项目来说确实肉疼。

于是开始找"既要合规又要免费"的路子。

选型过程

其实思路很明确:找基于 PostgreSQL 开发的国产数据库。PG 协议宽松,社区活跃,很多国产数据库都是基于它二次开发的。

最后锁定两个候选:

  • 阿里云 PolarDB for PostgreSQL 开源版

  • 天翼云 OpenTeleDB

两个都通过安全可靠测评,都开源免费,都支持私有化部署。考虑到 PolarDB 生态更成熟、文档更全,先拿它试水。

踩坑实录:从 Docker 到 pgAdmin

第一步:拉取镜像

官方 Docker Hub 的镜像在国内拉取太慢,换了阿里云国内镜像源:

docker pull registry.cn-hangzhou.aliyuncs.com/polardb_pg/polardb_pg_local_instance:15

第二步:容器运行

一开始用官方命令直接跑,结果宿主机连不上数据库------没做端口映射。

正确的后台运行命令:

复制代码
docker run -itd --name polardb-test \
  --cap-add=SYS_PTRACE \
  --privileged=true \
  -p 5432:5432 \
  registry.cn-hangzhou.aliyuncs.com/polardb_pg/polardb_pg_local_instance:15

验证运行状态:

看到 PORTS 列显示 0.0.0.0:5432->5432/tcp 就说明端口映射成功了。

第三步:测试数据库

用 docker exec 进入容器执行 SQL:

复制代码
docker exec -it polardb-test psql -U postgres -c "SELECT version();"

返回结果:

复制代码
 PostgreSQL 15.17 (PolarDB 15.17.5.0 build unknown) on x86_64-linux-gnu

PolarDB 跑起来了,基于 PG 15.17。

第四步:pgAdmin 连接问题(坑)

用 pgAdmin 4 连接时,报错:

复制代码
fe_sendauth: no password supplied

明明 docker exec 可以直接连,为啥 pgAdmin 不行?

查了一下,docker exec 走的是本地 socket 连接,pg_hba.conf 配置的是 trust 认证。而 pgAdmin 走 TCP/IP 网络连接,默认要求密码认证。

解决方案:给 postgres 用户设个密码

复制代码
docker exec -it polardb-test psql -U postgres -c "ALTER USER postgres WITH PASSWORD '123456';"

设置完成后,pgAdmin 连接配置:

参数
Host localhost
Port 5432
Username postgres
Password 123456

这次终于连上了。

总结

最终成果:一套完全免费的国产数据库环境,跑在 Docker 里,可以用于开发测试,也可以打包交付给客户私有化部署。

成本:0 元软件授权费。

技术栈:国产数据库(阿里云 PolarDB)+ 容器化部署 + 标准 PostgreSQL 生态(pgAdmin/pg_dump 等工具通用)。

踩坑点:

  1. 国内拉镜像要用阿里云源,否则慢到怀疑人生

  2. 容器运行必须加 -p 5432:5432 做端口映射,否则外网连不上

  3. pgAdmin TCP 连接需要密码,docker exec local 连接不需要,记得人工设一下

下一步准备试试天翼云的 OpenTeleDB,听说性能优化做得不错,尤其是解决了 PG 那个老大难的数据膨胀问题。到时候再写一篇对比评测。


附录:常用管理命令

复制代码
# 查看容器
docker ps

# 进入容器 bash
docker exec -it polardb-test bash

# 停止容器
docker stop polardb-test

# 启动已存在的容器
docker start polardb-test

# 删除容器
docker rm -f polardb-test
相关推荐
复园电子2 小时前
企业级PDF批量盖章方案选型指南
数据库·pdf
AI-好学者9 小时前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
其实防守也摸鱼10 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚10 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
龙仔72510 小时前
SQL Server 创建只读账号完整操作(分两种场景:SSMS图形界面 + T-SQL脚本)
数据库·sql·oracle
霁月的小屋11 小时前
生产环境中的事务实践——银行系统上线记(四)
数据库
Database_Cool_11 小时前
AI 应用数据底座首选:阿里云 PolarDB 为大模型 RAG 提供一体化支撑
数据库·阿里云
玖玥拾11 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
IvorySQL12 小时前
PG 日报|社区讨论重构 pg_hba 配置文件格式
数据库·人工智能·postgresql·重构·ivorysql
逝水无殇12 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#