PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie erhalte ich mit PostgreSQL eine Spaltenattributabfrage aus dem Tabellennamen?

Hier ist eine Abfrage für den Systemkatalog, die alles abrufen sollte, was Sie benötigen (mit einem kostenlosen Primärschlüssel-Bonusfeld).

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;

Was Ergebnisse zurückgeben würde wie:

 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:Die Spaltennummer
  • name:Der Spaltenname
  • typ:der Datentyp
  • notnull:Ist die Spalte definiert als NOT NULL
  • Kommentar:Jeder COMMENT für die Spalte definiert
  • primary_key:Ist die als PRIMARY KEY definierte Spalte
  • default:Der für den Standardwert verwendete Befehl