4

MonetDBは、データベースのスキーマ構造を発見するために、かなり包括的なシステム カタログ ビューのセットをサポートしているようです。残念ながら、特定の key または index の一連の列を取得する SQL クエリが見つからないようです。Tables テーブルによって報告されるシステム テーブル/ビューは次のとおりです。

スキーマ タイプ 関数 引数 シーケンス 依存関係 接続 _tables _columns キー idxs トリガー オブジェクト テーブル 列 db_user_info ユーザー user_role auths 権限 queryhistory callhistory querylog システム関数

依存関係を試しましたが、ID が一致していないようです。ところで、ソース コードを調べてみましたが、システム ビューがどこで作成および管理されているかまだわかりません。

4

1 に答える 1

1

2 年半後、次の質問に興味をそそられたからです。名前が不適切な「オブジェクト」テーブルを使用して、特定のキーの列を実際に見つけることができます。

たとえば、次の表を考えてみましょう

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およびtablesテーブルからのより多くの情報を含めることができます。SELECT

于 2014-12-07T12:05:29.893 に答える