你在解决什么问题?
项目目前已有 postgres profile 和 PostgreSQL 驱动,但它其实是个寄生的半成品,想用 PostgreSQL 上生产的人会踩到下面这些坑:
- 没有独立迁移树:
application-postgres.yml 的 flyway.locations 指向 db/migration/kingbase。PostgreSQL 借用 KingbaseES 的迁移脚本,导致 PG 想做任何专属优化都被 KingbaseES 兼容性绑住。
- 从没被真实数据库验证过:仓库没有 CI,也没有任何针对 PostgreSQL 的测试。所谓"支持 PG"目前是纸面的——没人能保证那 150+ 个迁移在真实 PG 上跑得通。
- JSON 全存 TEXT:约 40 个 JSON 列(
config_json / headers_json / settings_json / delivery_config …)在 PG 上仍是 TEXT,完全没用上 PG 的 JSONB(写入校验、未来可索引)。
- 没有 PG 部署文档:README / 文档只讲 MySQL。
相关:#244 提到希望支持更多数据库类型——这个 issue 不是加新厂商,而是先把已经存在的 PostgreSQL 支持补成真正可用、可验证、有文档的一等公民。
你期望它怎么工作?
按单一关注点拆成 5 个独立 PR:
- fork 独立迁移树
db/migration/postgresql(从 kingbase 树 fork,fork 时字节一致 → 切 location 对现有部署透明,Flyway 按 checksum 而非路径判定);顺手补齐 application-kingbase.yml 缺失的 mate.wiki.watcher-*。
- 高频 JSON 列 TEXT → JSONB(约 40 列;
params_schema / output_schema / mate_message.metadata 这类任意文本/半结构化的刻意保持 TEXT)。JDBC URL 加 stringtype=unspecified 让 String 绑定的 JSON 值能写入 JSONB;把唯一对 JSON 列做字符串操作的 V53 改写成 JSONB 原生 || 合并。
- Testcontainers 集成测试:真实
postgres:16 跑完整迁移树 + JSONB CRUD 往返 + 非法 JSON 拒绝;@Testcontainers(disabledWithoutDocker=true),无 Docker 自动跳过不影响日常构建。
docker-compose.pg.yml 叠加文件:一条命令把后端切到 PostgreSQL。
- 文档:新增中英
database-postgresql.md,更新 README / CLAUDE.md / config / docker-deploy。
每个 PR 都已在真实 PostgreSQL 16 上验证(153 迁移全绿、列物理类型 = jsonb、JacksonTypeHandler 往返、非法 JSON 被拒)。
实现已完成,PR 随后提交,关联本 issue。
你试过的替代方案?
- 继续共用 kingbase 树:能跑,但 PG 和 KingbaseES 的演进被绑死,且依然没有验证和文档。独立树让两者解耦,且 fork 时零行为差异。
- JSONB 用自定义 TypeHandler:可行但要改 ~40 处实体 + 大量回归。
stringtype=unspecified 一行覆盖所有写入路径(含 JacksonTypeHandler),零 Java 改动,是 PG JDBC 官方推荐姿势。
你在解决什么问题?
项目目前已有
postgresprofile 和 PostgreSQL 驱动,但它其实是个寄生的半成品,想用 PostgreSQL 上生产的人会踩到下面这些坑:application-postgres.yml的flyway.locations指向db/migration/kingbase。PostgreSQL 借用 KingbaseES 的迁移脚本,导致 PG 想做任何专属优化都被 KingbaseES 兼容性绑住。config_json/headers_json/settings_json/delivery_config…)在 PG 上仍是TEXT,完全没用上 PG 的 JSONB(写入校验、未来可索引)。相关:#244 提到希望支持更多数据库类型——这个 issue 不是加新厂商,而是先把已经存在的 PostgreSQL 支持补成真正可用、可验证、有文档的一等公民。
你期望它怎么工作?
按单一关注点拆成 5 个独立 PR:
db/migration/postgresql(从 kingbase 树 fork,fork 时字节一致 → 切 location 对现有部署透明,Flyway 按 checksum 而非路径判定);顺手补齐application-kingbase.yml缺失的mate.wiki.watcher-*。params_schema/output_schema/mate_message.metadata这类任意文本/半结构化的刻意保持 TEXT)。JDBC URL 加stringtype=unspecified让 String 绑定的 JSON 值能写入 JSONB;把唯一对 JSON 列做字符串操作的 V53 改写成 JSONB 原生||合并。postgres:16跑完整迁移树 + JSONB CRUD 往返 + 非法 JSON 拒绝;@Testcontainers(disabledWithoutDocker=true),无 Docker 自动跳过不影响日常构建。docker-compose.pg.yml叠加文件:一条命令把后端切到 PostgreSQL。database-postgresql.md,更新 README / CLAUDE.md / config / docker-deploy。每个 PR 都已在真实 PostgreSQL 16 上验证(153 迁移全绿、列物理类型 = jsonb、JacksonTypeHandler 往返、非法 JSON 被拒)。
实现已完成,PR 随后提交,关联本 issue。
你试过的替代方案?
stringtype=unspecified一行覆盖所有写入路径(含 JacksonTypeHandler),零 Java 改动,是 PG JDBC 官方推荐姿势。