国产数据库私有化部署实战: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
相关推荐
敲个大西瓜14 小时前
Redis一百道核心面试题
数据库·redis·缓存
無a伟18 小时前
Redis持久化详解:RDB与AOF原理、配置、优缺点
数据库
muddjsv18 小时前
SQLite 外键进阶:CASCADE / SET NULL / 级联更新与完整性校验
数据库·sqlite
APItesterCris18 小时前
Open Claw 实战教程:5 分钟搭建京东商品自动化监控与数据分析系统
大数据·运维·数据库·数据仓库·自动化
Nturmoils19 小时前
查库存的 SQL 时灵时不灵,最后发现是 WHERE 里两个函数在打架
数据库
不想纳尼的青春20 小时前
where = 的作用?会影响性能吗?count(*) 和 count()哪个快?
数据库·oracle
倔强的石头_20 小时前
Spring Boot 接入金仓数据库:配置分层、启动自检与常见错误
数据库
杨云龙UP20 小时前
生产环境Oracle表空间扩容实战:使用Toad for Oracle图形界面新增Datafile(ASM+OMF)
linux·运维·数据库·oracle·表空间·asm 存储管理·toad
黑桃小柒721 小时前
Django模型关系:从一对多到多对多全解析
数据库·django·sqlite
上海安当技术21 小时前
统一身份认证平台怎么落地?11 个异构业务系统接入 ASP 的完整实施路径
数据库·servlet·架构·kubernetes·jenkins