tidb 获取所有分区表,官方示例的疑问

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】v6.5.0

按照官方文档,执行以下 sql 能够获取到该集群中的所有分区表

select distinct concat(TABLE_SCHEMA,'.',TABLE_NAME)
    from information_schema.PARTITIONS
    where TABLE_SCHEMA not in ('INFORMATION_SCHEMA','mysql','sys','PERFORMANCE_SCHEMA','METRICS_SCHEMA');

我试验了一下,但是把不是分区表的表也打印出来了

是哪里出现了问题?

应该是文档错误,漏了条件
得加上 PARTITION_NAME is not null
或者 TIDB_PARTITION_ID is not null

可以去反馈区反馈下了

1 个赞

好像没有 TIDB_PARTITION_ID 这个列

发现可以直接通过

show table status 

拿到

又学到一个常用运维语句 :+1:

我再6.5.0里是能看到这个列的

TiDB root@10.18.13.224:INFORMATION_SCHEMA> show create table `PARTITIONS`\G
***************************[ 1. row ]***************************
Table        | PARTITIONS
Create Table | CREATE TABLE `PARTITIONS` (
  `TABLE_CATALOG` varchar(512) DEFAULT NULL,
  `TABLE_SCHEMA` varchar(64) DEFAULT NULL,
  `TABLE_NAME` varchar(64) DEFAULT NULL,
  `PARTITION_NAME` varchar(64) DEFAULT NULL,
  `SUBPARTITION_NAME` varchar(64) DEFAULT NULL,
  `PARTITION_ORDINAL_POSITION` bigint(21) DEFAULT NULL,
  `SUBPARTITION_ORDINAL_POSITION` bigint(21) DEFAULT NULL,
  `PARTITION_METHOD` varchar(18) DEFAULT NULL,
  `SUBPARTITION_METHOD` varchar(12) DEFAULT NULL,
  `PARTITION_EXPRESSION` longtext DEFAULT NULL,
  `SUBPARTITION_EXPRESSION` longtext DEFAULT NULL,
  `PARTITION_DESCRIPTION` longtext DEFAULT NULL,
  `TABLE_ROWS` bigint(21) DEFAULT NULL,
  `AVG_ROW_LENGTH` bigint(21) DEFAULT NULL,
  `DATA_LENGTH` bigint(21) DEFAULT NULL,
  `MAX_DATA_LENGTH` bigint(21) DEFAULT NULL,
  `INDEX_LENGTH` bigint(21) DEFAULT NULL,
  `DATA_FREE` bigint(21) DEFAULT NULL,
  `CREATE_TIME` datetime DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL,
  `CHECK_TIME` datetime DEFAULT NULL,
  `CHECKSUM` bigint(21) DEFAULT NULL,
  `PARTITION_COMMENT` varchar(80) DEFAULT NULL,
  `NODEGROUP` varchar(12) DEFAULT NULL,
  `TABLESPACE_NAME` varchar(64) DEFAULT NULL,
  `TIDB_PARTITION_ID` bigint(21) DEFAULT NULL,
  `TIDB_PLACEMENT_POLICY_NAME` varchar(64) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
1 row in set
Time: 0.010s
TiDB root@10.18.13.224:INFORMATION_SCHEMA>

官方文档上也没有看到这个列

我的版本是 5.4.1–>6.1.2–>6.5.0 升上来的 不知道你的6.5是直接安装的还是升级上来的

把分区表做个表分析,看能出现这两列吗?

我觉得是有问题,跟之前一些没有设置tiflash 副本的表一样能在tiflash的系统表里能查出来。 按理说parttitions里应该只有分区表

奇怪,下午来看的时候又有了

mysql> select * from information_schema.partitions where table_schema = "test" limit 1\G
*************************** 1. row ***************************
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: employees
               PARTITION_NAME: P_LT_100
            SUBPARTITION_NAME: NULL
   PARTITION_ORDINAL_POSITION: 1
SUBPARTITION_ORDINAL_POSITION: NULL
             PARTITION_METHOD: RANGE
          SUBPARTITION_METHOD: NULL
         PARTITION_EXPRESSION: `id`
      SUBPARTITION_EXPRESSION: NULL
        PARTITION_DESCRIPTION: 100
                   TABLE_ROWS: 0
               AVG_ROW_LENGTH: 0
                  DATA_LENGTH: 0
              MAX_DATA_LENGTH: 0
                 INDEX_LENGTH: 0
                    DATA_FREE: 0
                  CREATE_TIME: 2023-02-28 08:44:47
                  UPDATE_TIME: NULL
                   CHECK_TIME: NULL
                     CHECKSUM: NULL
            PARTITION_COMMENT: 
                    NODEGROUP: NULL
              TABLESPACE_NAME: NULL
            TIDB_PARTITION_ID: 81
   TIDB_PLACEMENT_POLICY_NAME: NULL

我记得早上无论是 select 还是 show create table 都没这两行的。

版本是 v6.5.0, 直接部署的。

抱歉,我的问题 :smiling_face_with_tear:, 正常都会有这两列的,没查出来那个是搞混到了 mysql 的结果。
但是主楼的那个情况是 TiDB 的。

我觉得 @h5n1 大佬说的是有道理的

image

可以到反馈区去反应下

加上这个试下

我发现 您在 test 库 和 ttt库 一直进行切换。