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 중국어 웹사이트의 기타 관련 기사를 참조하세요!