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

作者:澎涛 | 分类:科技 | 发布时间:2026-05-13 08:59:41 | 阅读:9 | 点赞:0 | 点踩:0
标签: Polardb

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

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

操作系统好办,现在主流的国产 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

验证运行状态:

image

 

看到 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 连接配置:

 

参数值HostlocalhostPort5432UsernamepostgresPassword123456

 

image

 

 

这次终于连上了。

image

总结

最终成果:一套完全免费的国产数据库环境,跑在 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

 


评论 (0)

登录 后发表评论

暂无评论