postgresql rookie needs help with system catalog

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

postgresql rookie needs help with system catalog

barry kimelman
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 ?

Thanks.
--

Barrry Kimelman
Winnipeg, Manitoba, Canada
Reply | Threaded
Open this post in threaded view
|

RE: postgresql rookie needs help with system catalog

Vianello, Dan A

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:[hidden email]]
Sent: Wednesday, January 22, 2020 8:52 AM
To: [hidden email]
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 ?

 

Thanks.

--

 

Barrry Kimelman

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.
Reply | Threaded
Open this post in threaded view
|

Re: postgresql rookie needs help with system catalog

Tom Lane-2
In reply to this post by barry kimelman
barry kimelman <[hidden email]> writes:
> 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"

A useful trick here is to start psql with the -E option, which will
cause it to echo the actual queries it sends for backslash commands.

                        regards, tom lane


Reply | Threaded
Open this post in threaded view
|

Re: postgresql rookie needs help with system catalog

Keith Fiske-2
In reply to this post by barry kimelman



On Wed, Jan 22, 2020 at 9:56 AM barry kimelman <[hidden email]> wrote:
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 ?

Thanks.
--

Barrry Kimelman
Winnipeg, Manitoba, Canada

You can turn the ECHO_HIDDEN flag on in psql. This will show the underlying queries that run whenever you do any of the \d psql commands. They're often more complex than you expect, but definitely helps you with learning the system catalogs as you're trying to do here

Just type the following in psql, and your next \d commands will also show a bunch of additional details. Can either log off or set this back to "off" to disable it.

\set ECHO_HIDDEN on

--
Keith Fiske
Senior Database Engineer
Crunchy Data - http://crunchydata.com