暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

修改表结构后,相关的查询报错

原创 qi_yu 2024-08-14
127

发现版本

opengauss 3.0.5

问题概述

修改表结构后,相关的查询报错“cached plan must not change result type”

复现步骤

  1. 创建表,生成 plan cache
create table t1(a int, b int);
prepare p1 as select * from t1; 
-- 此处没有参数,确保 prepare 语句可以走generic
execute p1;
  1. 改变语句的结果类型(同 session 或者不同 session 都可以,此处通过改变表的类型间接改变了语句的结果类型)
alter table t1 modify a varchar;
  1. 再次执行 prepared 语句
execute p1; 

– 报错 “cached plan must not change result type”

在 JDBC 环境复现时需要关闭 auto commit/auto save
prepare 语句用 PreparedStatement 进行模拟

根因分析

当前版本的 openGauss 数据库并不支持热更新 plan cache 的结果类型。

修复方案

在获取缓存中的 plan cache 时,如果结果集检查不通过,则主动失效并重建 plan cache

解决方案

设置plan_cache_type_validation=off
image.png
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论