TIDB4.0 创建视图view查询columns表,发现date_type列没有继承原表的字段类型?


正常的create view xxx as select * from xxx;
查询 该视图字段时,select * from INFORMATION_SCHEMA.columns where table_name=‘v_t_store_refund_info’

发现 好几列都没值,尤其是data_type

  1. 具体哪个版本?

Release Version: v4.0.0
Edition: Community
Git Commit Hash: 689a6b6439ae7835947fcaccf329a3fc303986cb
Git Branch: heads/refs/tags/v4.0.0
UTC Build Time: 2020-05-28 01:37:40
GoVersion: go1.13
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false

1.我刚刚无意间使用 此命令,desc v_t_store_refund_info
然后再次去 执行select * from INFORMATION_SCHEMA.columns where table_name=‘v_t_store_refund_info’
发现对应的表结构 类型可以获取到
请问这算不算是 4.0的BUG
不可能我每次建立视图都要 desc一下吧?
2.请教一下,为何data_type 里面会出现var_string类型,这是什么?

  1. 复现了和您一样的问题,会尽快答复,多谢

https://github.com/pingcap/tidb/issues/17096 这个是个目前的已知问题,会在后续进行修复

请问这个问题修复了没有?

暂时还没有,预计在下个版本可能修复,多谢。

这个问题修复了吗?

看 github 的描述,是在 4.0.8 修复了

我说的是 data_type列 没继承原表类型的问题哦,我在4.0.8修复的问题中没看到这点

  1. 嗯,测试了下,应该还没有修复,v4.0.9 也没有修复。
  2. 那个 github issue 修复的是 varchar 被显示成varstring的问题,抱歉。
  3. 目前看可能还是需要 desc 更新.
  4. 我们再分析下,抱歉。目前这个问题对您有什么影响吗?会需要读取这个列吗?

希望尽快修复吧,我们很多数据都是通过view的方式对外,但当代码去解析view的元数据,都解析不到,导致元数据没办法管理

是不是我这个也要提到github issue中,才会被你们采纳修改?

  1. 想要更新 information_schema.columns 中 view 的信息,目前只能通过 desc table 来进行。
  2. 只有在计算的时候才可以知道这个 view 表中列的类型(例如view下的基表进行变动,view表中的列类型也会随之变动),因此我们目前没有将 view 的列类型存下来,而是每次创建view 算子时进行类型推倒。
  3. 您可以在 github 再提个issue.