You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Helm配置Keycloak+PostgreSQL时出现client_id列不存在错误

解决Keycloak切换PostgreSQL后出现"column 'client_id' does not exist"错误

我来帮你搞定这个问题——这个报错我之前处理过好几次,本质就是Keycloak依赖的数据库表结构没正确创建,尤其是带client_id列的表压根没生成出来。先理清楚你的情况:

问题回顾

你用Helm部署Keycloak 3.4.0.Final,用默认H2数据库时一切正常,但切换到外部PostgreSQL后就炸了,报错:

ERROR: column "client_id" does not exist

你的Helm配置片段是这样的:

keycloak:
  replicas: 1
  image:
    repository: jboss/keycloak
    tag: 3.4.0.Final
  username: admin
  password: admin
  service:
    type: LoadBalancer
  persistence:
    deployPostgres: false
    dbVendor: POSTGRES
    dbName: keycloak
    dbHost: xxx.pgsql.domain.com
    dbPort: 5432
    dbUser: keycloak

为啥会出这问题?

Keycloak 3.4.0是个比较老的版本了(2017年发布),切换到PostgreSQL出问题大概率是这几个原因:

  • 你没配置数据库密码,Keycloak连不上数据库,自然没法自动初始化表结构
  • 外部PostgreSQL没提前执行Keycloak的初始化脚本,表和列都没创建
  • 你的PostgreSQL版本太高,和Keycloak 3.4.0的驱动不兼容(这个版本只支持PostgreSQL 9.x)

一步步解决

1. 先补上数据库密码配置

你的配置里缺了dbPassword或者对应的Secret,Keycloak没密码连不上PostgreSQL,根本没法初始化。两种方式补充:

  • 测试环境可以直接明文配置(生产环境不推荐):
    persistence:
      # ... 其他配置保持不变 ...
      dbPassword: 你的PostgreSQL密码
    
  • 生产环境用Kubernetes Secret更安全:
    先创建Secret:
    kubectl create secret generic keycloak-db-secret --from-literal=password=你的PostgreSQL密码
    
    然后在Helm配置里指定:
    persistence:
      # ... 其他配置保持不变 ...
      existingSecret: keycloak-db-secret
      existingSecretKey: password
    

2. 手动执行初始化脚本(如果自动初始化失败)

老版本Keycloak的自动初始化偶尔会出问题,你可以手动给PostgreSQL创建表结构:

  1. 下载Keycloak 3.4.0.Final的源码包,找到docs/javadocs/org/keycloak/connections/jpa/updater/liquibase/changeLog/postgres目录下的所有脚本
  2. 用psql连接到你的数据库:
    psql -h xxx.pgsql.domain.com -U keycloak -d keycloak
    
  3. 按顺序执行这些脚本,先跑基础schema的脚本,再执行更新脚本,确保所有表和列都正确生成

3. 检查PostgreSQL版本兼容性

Keycloak 3.4.0只支持PostgreSQL 9.x版本,如果你的外部数据库是10+版本,肯定会有兼容问题。要么把PostgreSQL降级到9.6版本,要么把Keycloak升级到15+版本(新版本支持PostgreSQL 10+)

4. 确认数据库用户权限

别忘检查keycloak用户有没有足够的操作权限:

  • 修改PostgreSQL的pg_hba.conf文件,允许Keycloak所在的Kubernetes集群IP段连接数据库
  • 给用户授予全数据库权限:
    GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;
    

验证步骤

  1. 重新部署Keycloak:
    helm upgrade --install keycloak 你的HelmChart名称 -f 你的配置文件.yaml
    
  2. 查看Pod日志确认没有报错:
    kubectl logs -f keycloak-0
    
  3. 登录Keycloak管理控制台,尝试创建客户端等操作,确认功能正常

内容的提问来源于stack exchange,提问作者Huy Chau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:29:04