如何在MonetDB中发现给定索引或键的列

时间:2012-06-02 06:53:55

标签: sql monetdb

MonetDB似乎支持一组相当全面的系统目录视图,以便发现数据库的模式结构。不幸的是,我似乎无法找到一个SQL查询来获取给定键或索引的列列。以下是Tables表报告的系统表/视图:

模式 类型 功能 ARGS 序列 依赖 连接 _tables _列 按键 idxs 触发器 对象 表 列 db_user_info 用户 USER_ROLE auths中 特权 queryhistory 通话记录 querylog systemfunctions

我尝试了依赖项,但ID似乎不匹配。顺便说一句,我确实尝试查看源代码,但我还没有找到创建和维护系统视图的位置。

1 个答案:

答案 0 :(得分:1)

两年半之后,因为我对这个问题很感兴趣:你确实可以使用命名不佳的“对象”表找到给定键的列。

例如,请考虑下表

CREATE TABLE indextest (a INT, b INT);
ALTER TABLE indextest ADD CONSTRAINT indextest_pk PRIMARY KEY (a);
ALTER TABLE indextest ADD CONSTRAINT indextest_uq UNIQUE (a, b);                                                                           

现在让我们找出哪些列属于indextest_uq

SELECT idxs.id AS index_id, columns.id AS column_id, tables.name AS table_name, columns.name AS column_name, columns.type AS column_type 
FROM idxs JOIN objects ON idxs.id=objects.id JOIN tables ON idxs.table_id=tables.id JOIN columns ON idxs.table_id=columns.table_id AND objects.name=columns.name 
WHERE idxs.name='indextest_uq';

此查询的结果如下所示:

+----------+-----------+------------+-------------+-------------+
| index_id | column_id | table_name | column_name | column_type |
+==========+===========+============+=============+=============+
|     6446 |      6438 | indextest  | a           | int         |
|     6446 |      6439 | indextest  | b           | int         |
+----------+-----------+------------+-------------+-------------+

显然,通过扩展查询的columns部分,可以包含来自tablesSELECT表的更多信息。