国产数据库私有化部署实战: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
相关推荐
蒸蒸yyyyzwd15 小时前
cpp选手秋招学习笔记day14
数据库·oracle
数据库小学妹15 小时前
MySQL 8.4还是9.7 LTS?8.0 EOL后升级怎么选
数据库·mysql·dba·版本升级·数据库运维
存在morning16 小时前
【PySpark 学习笔记 三】DataFrame API 入门
android·java·数据库
m0_5474866616 小时前
《数据库原理及应用教程MySQL 8.0》全套PPT课件2026
数据库·mysql
程序员夏洛16 小时前
MySQL 中的事务隔离级别有哪些?
数据库·mysql
冰暮流星16 小时前
mysql之字符串函数
数据库·mysql
m0_5474866616 小时前
《Oracle数据库从入门到实战》全套PPT课件2026
数据库·oracle
2601_9657984716 小时前
Evently Theme Setup Guide: Fast Conference, Meetup & Summit Architecture
服务器·网络·数据库
今天AI了吗16 小时前
AI Agent 在数据分析领域的落地判断:哪些场景真的需要 Agent
java·数据库·人工智能·python·sql·数据分析·copilot
cspttty16 小时前
会计专业大学期间考什么证
大数据·数据库·人工智能·数据挖掘