If you run psql with the –E flag at start then it will echo the queries used to generate all of the \ commands.
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN
'foreign table' WHEN 'p' THEN 'table' WHEN 'I' THEN 'index' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','p','v','m','S','f','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
From: barry kimelman [mailto:perlmaster56@gmail.com]
Sent: Wednesday, January 22, 2020 8:52 AM
To: pgsql-novice@lists.postgresql.org
Subject: postgresql rookie needs help with system catalog
I am trying to come up with a query of the system catalog tables to give me the same info as the psql command "\d tablename"
so far I have come up with the following query
1 SELECT
2 a.attname as "Column",
3 pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype"
4 FROM
5 pg_catalog.pg_attribute a
6 WHERE
7 a.attnum > 0
8 AND NOT a.attisdropped
9 AND a.attrelid = (
10 SELECT c.oid
11 FROM pg_catalog.pg_class c
12 LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
13 WHERE c.relname = 'laptop'
14 AND pg_catalog.pg_table_is_visible(c.oid)
15 );
which yields the following result
Column | Datatype
---------------+------------------------
id | integer
name | character varying(250)
price | double precision
purchase_date | date
(4 rows)
But how do I get the Collation and Nullable and Default values displayed by the "psql \d" command ?
--
Winnipeg, Manitoba, Canada
The contents of this e-mail message and
any attachments are intended solely for the
addressee(s) and may contain confidential
and/or legally privileged information. If you
are not the intended recipient of this message
or if this message has been addressed to you
in error, please immediately alert the sender
by reply e-mail and then delete this message
and any attachments. If you are not the
intended recipient, you are notified that
any use, dissemination, distribution, copying,
or storage of this message or any attachment
is strictly prohibited.