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

PostgreSQLを使用してテーブル名から列属性クエリを取得するにはどうすればよいですか?

    これは、必要なものすべてをフェッチする必要があるシステムカタログに対するクエリです(ボーナスの主キーフィールドが無料でスローされます)。

    SELECT DISTINCT
        a.attnum as num,
        a.attname as name,
        format_type(a.atttypid, a.atttypmod) as typ,
        a.attnotnull as notnull, 
        com.description as comment,
        coalesce(i.indisprimary,false) as primary_key,
        def.adsrc as default
    FROM pg_attribute a 
    JOIN pg_class pgc ON pgc.oid = a.attrelid
    LEFT JOIN pg_index i ON 
        (pgc.oid = i.indrelid AND i.indkey[0] = a.attnum)
    LEFT JOIN pg_description com on 
        (pgc.oid = com.objoid AND a.attnum = com.objsubid)
    LEFT JOIN pg_attrdef def ON 
        (a.attrelid = def.adrelid AND a.attnum = def.adnum)
    WHERE a.attnum > 0 AND pgc.oid = a.attrelid
    AND pg_table_is_visible(pgc.oid)
    AND NOT a.attisdropped
    AND pgc.relname = 'TABLE_NAME'  -- Your table name here
    ORDER BY a.attnum;
    

    次のような結果が返されます:

     num |    name     |             typ             | notnull |       comment       | primary_key 
    -----+-------------+-----------------------------+---------+---------------------+-------------
       1 | id          | integer                     | t       | a primary key thing | t
       2 | ref         | text                        | f       |                     | f
       3 | created     | timestamp without time zone | t       |                     | f
       4 | modified    | timestamp without time zone | t       |                     | f
       5 | name        | text                        | t       |                     | f
    
    • num:列番号
    • 名前:列名
    • typ:データ型
    • notnull:列はNOT NULLとして定義されていますか
    • コメント:任意のCOMMENT 列に定義されています
    • primary_key:列はPRIMARY KEYとして定義されていますか
    • デフォルト:デフォルト値に使用されるコマンド


    1. OracleのSYS_GUID()UUID RFC 4122に準拠していますか?

    2. MySQLでJSONデータを検索する方法は?

    3. SQL:2つのフィールドに基づいて重複を見つける方法は?

    4. MySQLダンプでこれらのコメントを取り除くにはどうすればよいですか?