PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment obtenir une requête d'attributs de colonne à partir du nom de la table à l'aide de PostgreSQL ?

Voici une requête sur le catalogue système qui devrait récupérer tout ce dont vous avez besoin (avec un champ de clé primaire bonus ajouté gratuitement).

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;

Ce qui renverrait des résultats comme :

 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 :le numéro de la colonne
  • name :le nom de la colonne
  • type :le type de données
  • notnull :la colonne est-elle définie comme NOT NULL
  • commentaire :Tout COMMENT défini pour la colonne
  • primary_key :la colonne est-elle définie comme PRIMARY KEY
  • default :la commande utilisée pour la valeur par défaut