根据PostgreSQL 系统表查出字段描述

SELECT a.attname AS fields_name,
       pg_catalog.format_type(a.atttypid, a.atttypmod),
       CASE WHEN a.attnotnull  THEN 'N' ELSE ''
       END AS fields_not_null,
       pg_attrdef.adsrc AS fields_default,
       b.contype,
       pg_description.description AS fields_comment
 FROM
       pg_catalog.pg_attribute a
       INNER JOIN pg_class  ON a.attrelid = pg_class.oid AND pg_class.relname='tablename'
       INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public'
       INNER JOIN pg_type   ON a.atttypid = pg_type.oid
       LEFT OUTER JOIN pg_attrdef ON pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = a.attnum
       LEFT OUTER JOIN pg_description ON pg_description.objoid = pg_class.oid AND pg_description.objsubid = a.attnum
       LEFT OUTER JOIN (SELECT a.attnum, pg_constraint.contype
                        FROM pg_catalog.pg_attribute a
			     INNER JOIN pg_class  ON a.attrelid = pg_class.oid AND pg_class.relname='tablename'
                             INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public'
                             INNER JOIN pg_constraint ON pg_constraint.conrelid = pg_class.oid 
                                             AND pg_constraint.connamespace = pg_namespace.oid 
                                             AND a.attnum = ANY(pg_constraint.conkey)
                        GROUP BY a.attnum, pg_constraint.contype) b
                        ON a.attnum = b.attnum
 WHERE
       a.attnum > 0
       AND attisdropped <> 't' 
       AND a.attname <> 'oid'
 ORDER BY a.attnum;

  

posted @ 2011-09-08 18:58  shuaixf  阅读(1140)  评论(0)    收藏  举报