SELECT
CASE WHEN attnum =0 THEN quote_ident( pg_namespace.nspname) END AS "schema"
,CASE WHEN attnum =0 THEN pg_class.relname END AS relname
--,pg_inherits.inhparent
,CASE WHEN attnum <>0 THEN attnum END AS attnum
,pg_attribute.attname
,CASE WHEN attnum= 0 THEN pg_catalog.obj_description(pg_class.oid) ELSE pg_description.description END
--,pg_type.typname
,TRIM (REPLACE(
REPLACE(
format_type(pg_attribute.atttypid, pg_attribute.atttypmod)
,'character varying','varchar')
,'without time zone','')
) AS format_type
--,pg_attribute.*
--,pg_class.*
FROM pg_class
INNER JOIN pg_namespace
ON pg_namespace.oid = pg_class.relnamespace
INNER JOIN
--/*
(SELECT
attrelid, attnum, attname,atttypid,atttypmod FROM pg_attribute pga
UNION ALL
SELECT pg_class.oid AS attrelid, 0 AS attnum,NULL AS attname, NULL AS atttypid ,NULL AS atttypmod
FROM pg_class
)--*/
pg_attribute
ON pg_attribute.attrelid = pg_class.oid
LEFT JOIN pg_description
ON pg_description.objoid = pg_class.oid
AND pg_description.objsubid = pg_attribute.attnum
LEFT JOIN pg_type
ON pg_attribute.atttypid=pg_type.oid
LEFT JOIN pg_inherits
ON pg_inherits.inhrelid = pg_class.oid
WHERE
pg_class.relkind='r'
AND pg_attribute.attnum>=0
AND pg_inherits.inhparent IS NULL
AND quote_ident( pg_namespace.nspname) NOT IN ('pg_catalog','information_schema'
,'londiste','pgq','pgq_ext','pgq_node','trash')
ORDER BY
quote_ident( pg_namespace.nspname)
,pg_class.relname
,pg_attribute.attnum
|