EsgynDB数据库把对象的元数据信息保存在"_MD_"这个模式下,所有对象信息,包括表、索引、视图、序列、存储过程、触发器、函数等均能在元数据表中找到对应信息。
"_MD_"这个模式下有一张关键表OBJECTS,每个对象有一个唯一的OBJECT_ID,通过此OBJECT_ID,关联不同的元数据表可以获取表不同的信息,如列信息、主键信息、索引信息等等。
OBJECTS表中有一个字段OBJECT_TYPE表示对象类型, 我们可以通过此对象类型字段查询每个对象是哪种对象。
这里就分享一条SQL语句来查询某个模式下各对象的个数,
SELECT
CASE
WHEN object_type = 'BT' THEN '表'
WHEN object_type = 'IX' THEN '索引'
WHEN object_type = 'UC' THEN '唯一约束'
WHEN object_type = 'UR'
AND b.text LIKE 'CREATE FUNCTION%' THEN '函数'
WHEN object_type = 'UR'
AND b.text LIKE 'CREATE PROCEDURE%' THEN '存储过程'
WHEN object_type = 'TR' THEN '触发器'
WHEN object_type = 'VI' THEN '视图'
WHEN object_type = 'SG' THEN '序列'
WHEN object_type = 'PK' THEN '主键'
ELSE '其它'
END
,
COUNT(*)
FROM
"_MD_".objects a
LEFT JOIN
(
SELECT
text_uid
, text
FROM
"_MD_".text
WHERE
text LIKE 'CREATE%')b
ON a.object_uid = b.text_uid
WHERE
schema_name = 'AFA_SIT'
AND object_name NOT IN
(
'SB_HISTOGRAMS'
, 'SB_HISTOGRAM_INTERVALS'
, 'SB_PERSISTENT_SAMPLES')
GROUP BY
1;
输出结果如下所示,
视图 103
表 531
主键 484
存储过程 36
其它 1
唯一约束 3
索引 178
序列 107
函数 1
触发器 5