升级 v4.0.9后, 查询新性能视图 table_storage_stats 报错 ERROR 1105 (HY000): Please specify the 'table_schema'

请问要如何处理

从报错内容来看是查询时没有指定 table_schema,指定后可以查询:

好的, 必须要指定 where table_schema = 或 where table_schema in 才能查询吗? 那我想查所有的database,是要都写到in吗? 我试了 where table_schema like 和 where table_schema <> 都会报一样的错,

目前只能通过指定 where table_schema = 或 where table_schema in 来查询,where table_schema like 不使用模糊匹配也能查询。如果觉得不符合使用习惯,可以提交一个 Github issue 。

之前这样指定的原因,是考虑查询所有库可能对系统资源占用过大,所以要求必须加入一个过滤条件。

https://github.com/pingcap/tidb/pull/15056/files#diff-feafb829b9dc329222267c9010f60ed7ce8800012c1e6dbcf6beb27d99e71b49R1492

// If not specify the table_schema, return an error to avoid traverse all schemas and their tables.
if len(schemas) == 0 {
	return errors.Errorf("Please specify the 'table_schema'")
This conversation was marked as resolved by crazycs520
}

这里我们可以考虑改进:

  • 允许类似 like 这样的条件
  • 在错误提示中说的更清楚一些

我通过程序去查询也报这个错。可是我加上table_schema了啊

type GetDbTopTable struct {
TableSchema string json:"TABLE_SCHEMAS" gorm:"column:TABLE_SCHEMA"
TableNames string json:"TABLE_NAMES" gorm:"column:TABLE_NAME"
TableSizes string json:"TABLE_SIZE" gorm:"column:TABLE_SIZE"
}

func GetDbTopTables(db *gorm.DB, dbname string) []GetDbTopTable {
var getDbTopTables []GetDbTopTable
db.Raw(“select TABLE_SCHEMA,TABLE_NAME,TABLE_SIZE from INFORMATION_SCHEMA.TABLE_STORAGE_STATS where TABLE_SCHEMA in (?) order by TABLE_SIZE desc limit 10”, dbname).Scan(&getDbTopTables)
return getDbTopTables
}

2022/11/17 15:54:03 yunwei/pkg/mod/gorm.io/gorm@v1.24.1-0.20221019064659-5dd2bb482755/finisher_api.go:509 Error 1105: Please specify the ‘table_schema’
[87.832ms] [rows:-] select TABLE_SCHEMA,TABLE_NAME,TABLE_SIZE from INFORMATION_SCHEMA.TABLE_STORAGE_STATS where TABLE_SCHEMA in (‘xx’) order by TABLE_SIZE desc limit 10
— PASS: TestGetDbTopTables (0.34s)