是否存在存储异常名称及描述信息的可查询数据表?
定位存储异常列表数据表的实操方法
别漫无目的地遍历所有表查找,直接查数据库自带的元数据,按字段特征筛选,很快就能定位到存储异常名称、对应描述信息的目标表。
- 核心筛选逻辑:找同时包含名称类字段、描述类字段,语义和异常/错误定义相关的业务表即可。
- 你之前写的异常检索SQL存在语法疏漏,漏写了
WHERE关键字,修正后的正确写法如下:
SELECT name FROM 找到的目标异常表 WHERE description LIKE '%loop%' OR description LIKE '%cycle%';
各主流数据库查找目标表的参考SQL
MySQL / MariaDB 环境
直接查询information_schema中的字段元数据,排除系统库,筛选同时带有名称、描述类字段的表:
SELECT DISTINCT table_schema, table_name FROM information_schema.columns WHERE (column_name LIKE '%name%' OR column_name LIKE '%exception_name%' OR column_name LIKE '%error_name%') AND (column_name LIKE '%desc%' OR column_name LIKE '%description%') AND table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
拿到返回的表名后,查询10条以内的数据预览内容,确认是存储异常枚举列表的表就可以直接使用。
PostgreSQL 环境
筛选逻辑和MySQL一致,排除PG自带的系统schema即可,其中ILIKE是不区分大小写的匹配语法:
SELECT DISTINCT table_schema, table_name FROM information_schema.columns WHERE (column_name ILIKE '%name%' OR column_name ILIKE '%exception_name%' OR column_name ILIKE '%error_name%') AND (column_name ILIKE '%desc%' OR column_name ILIKE '%description%') AND table_schema NOT IN ('pg_catalog', 'information_schema');
SQL Server 环境
SELECT DISTINCT s.name AS schema_name, t.name AS table_name FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id JOIN sys.columns c ON t.object_id = c.object_id WHERE (c.name LIKE '%name%' OR c.name LIKE '%exception_name%' OR c.name LIKE '%error_name%') AND (c.name LIKE '%desc%' OR c.name LIKE '%description%') AND s.name NOT IN ('sys', 'information_schema');
补充提示:一般做统一异常、错误码维护的表,表名多半会带
error、exception、errno、fault这类关键词,筛选出来的候选表数量不多,预览几行数据很快就能确认目标。
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

