ホームページ > データベース > mysql チュートリアル > PostgreSQL インデックスに含まれる列を特定するにはどうすればよいですか?

PostgreSQL インデックスに含まれる列を特定するにはどうすればよいですか?

DDD
リリース: 2024-12-29 19:23:11
オリジナル
538 人が閲覧しました

How to Identify Columns Included in PostgreSQL Indexes?

PostgreSQL でインデックス付けされた列の識別

PostgreSQL では、システム テーブルを使用してインデックスに参加する列を取得できます。次の手順に従ってください:

SELECT
    t.relname AS table_name,  -- Name of the indexed table
    i.relname AS index_name,  -- Name of the index
    a.attname AS column_name  -- Indexed column name
FROM
    pg_class t  -- Catalog table for tables
JOIN
    pg_class i ON t.oid = i.indrelid  -- Catalog table for indexes
JOIN
    pg_index ix ON i.oid = ix.indexrelid  -- Index information
JOIN
    pg_attribute a ON t.oid = a.attrelid AND a.attnum = ANY(ix.indkey)  -- Join with table attributes
WHERE
    t.relkind = 'r'  -- Restrict to regular tables
    AND t.relname LIKE 'test%';  -- Filter based on pattern (optional)
ORDER BY
    t.relname,  -- Sort by table name
    i.relname;   -- Then sort by index name
ログイン後にコピー

出力例:

table_name | index_name | column_name
------------+------------+-------------
test       | pk_test    | a
test       | pk_test    | b
test2      | uk_test2   | b
test2      | uk_test2   | c
test3      | uk_test3ab | a
test3      | uk_test3ab | b
test3      | uk_test3b  | b
test3      | uk_test3c  | c
ログイン後にコピー

さらに分析するには、列名をグループ化し、結果をロールアップします:

SELECT
    t.relname AS table_name,  -- Name of the indexed table
    i.relname AS index_name,  -- Name of the index
    array_to_string(array_agg(a.attname), ', ') AS column_names  -- Concatenate column names
FROM
    pg_class t  -- Catalog table for tables
JOIN
    pg_class i ON t.oid = i.indrelid  -- Catalog table for indexes
JOIN
    pg_index ix ON i.oid = ix.indexrelid  -- Index information
JOIN
    pg_attribute a ON t.oid = a.attrelid AND a.attnum = ANY(ix.indkey)  -- Join with table attributes
WHERE
    t.relkind = 'r'  -- Restrict to regular tables
    AND t.relname LIKE 'test%';  -- Filter based on pattern (optional)
GROUP BY
    t.relname,  -- Group by table name
    i.relname  -- Then group by index name
ORDER BY
    t.relname,  -- Sort by table name
    i.relname;   -- Then sort by index name
ログイン後にコピー

出力例:

table_name | index_name | column_names
------------+------------+--------------
test       | pk_test    | a, b
test2      | uk_test2   | b, c
test3      | uk_test3ab | a, b
test3      | uk_test3b  | b
test3      | uk_test3c  | c
ログイン後にコピー

以上がPostgreSQL インデックスに含まれる列を特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート