使用 DBeaver 修改 PanweiDB 数据时提示 "Column xxx is read-only" 的解决方案
案例背景
某省磐维集中式数据库。
环境描述
OS:bclinux-euler 21.10
数据库版本:PanweiDB_V2.0_S3.2.0_B01
兼容模式:A
数据库架构:集中式
描述
在某省部署的 PanweiDB 集中式数据库环境中,运维人员在使用 DBeaver 的数据编辑功能时遇到问题:无法直接编辑数据,系统提示 "Column xxx is read-only:没有相应的表格列",具体表现如下:
排查分析
初步排查
1、验证数据库功能:使用 SQL 的 UPDATE 语句可以正常修改数据,排除数据库本身的功能性问题
2、检查元数据同步:怀疑 DBeaver 中缓存的表结构元数据未及时更新,但刷新表信息后问题依旧存在
深入分析
通过对比观察发现:
- 数据库系统表中的列名均为小写格式
- DBeaver 中显示的列名同样为小写格式
- 但通过 SQL 查询返回的结果集中,列名显示为大写格式
这一现象指向数据库参数 uppercase_attribute_name 的影响。该参数控制查询结果中列名的大小写显示:
- 参数开启时,所有返回列名强制转换为大写
- 参数关闭时,保持列名的原始大小写格式
根本原因
DBeaver 在执行数据更新操作时,需要将修改的列与工具内部存储的元数据进行精确匹配。这个匹配过程对字符大小写敏感:
1、当 uppercase_attribute_name 参数开启时,查询返回的列名为大写格式
2、但 DBeaver 中存储的元数据列名为小写格式
3、大小写不一致导致 DBeaver 无法找到对应的列,从而产生 "没有相应的表格列" 错误
解决方案
考虑到既要保留 DBeaver 的数据编辑功能,又要维持应用程序从 Oracle 迁移后对大写列名的依赖,提供以下变通方案:
步骤一:调整数据库参数
关闭数据库中的 uppercase_attribute_name 参数,使查询返回的列名保持原始大小写格式,确保 DBeaver 能够正常识别和匹配列名。
步骤二:配置 JDBC 连接参数
在应用程序的 JDBC 连接字符串中添加参数 resultCaseMode=upper,该参数在驱动层面实现返回列名的大写转换,既满足应用程序的需求,又不影响 DBeaver 的正常使用。
实施效果
调整参数后,DBeaver 的数据编辑功能恢复正常:




