sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでインデックス付きの列を一覧表示します

    テストデータを作成します...

    create table test (a int, b int, c int, constraint pk_test primary key(a, b));
    create table test2 (a int, b int, c int, constraint uk_test2 unique (b, c));
    create table test3 (a int, b int, c int, constraint uk_test3b unique (b), constraint uk_test3c unique (c),constraint uk_test3ab unique (a, b));
    

    インデックス付けされたインデックスと列を一覧表示する:

    select
        t.relname as table_name,
        i.relname as index_name,
        a.attname as column_name
    from
        pg_class t,
        pg_class i,
        pg_index ix,
        pg_attribute a
    where
        t.oid = ix.indrelid
        and i.oid = ix.indexrelid
        and a.attrelid = t.oid
        and a.attnum = ANY(ix.indkey)
        and t.relkind = 'r'
        and t.relname like 'test%'
    order by
        t.relname,
        i.relname;
    
     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,
        i.relname as index_name,
        array_to_string(array_agg(a.attname), ', ') as column_names
    from
        pg_class t,
        pg_class i,
        pg_index ix,
        pg_attribute a
    where
        t.oid = ix.indrelid
        and i.oid = ix.indexrelid
        and a.attrelid = t.oid
        and a.attnum = ANY(ix.indkey)
        and t.relkind = 'r'
        and t.relname like 'test%'
    group by
        t.relname,
        i.relname
    order by
        t.relname,
        i.relname;
    
     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
    


    1. JavaScriptはMySQLと接続できますか?

    2. PostgreSQLのpggemをUbuntuにインストールするにはどうすればよいですか?

    3. MySQL高可用性フレームワークの説明–パートI:はじめに

    4. Oracleでの外部キー作成の問題