What is psql table size and row count?

470    Asked by dipesh_9001 in SQL Server , Asked on Mar 13, 2023

My database is in TB with different schemas. I would like to search in each schema following information:


  1. Schema name
  2. Table name
  3. Table size
  4. Rows count
  5. Table Created date

Where table name contains: *.bak or dropped_* or *_drop


Answered by Dipika Agarwal

The psql table size appears as entries in pg_catalog.pg_class that have relkind='r' (see the documentation).


table name: pg_class.relname schema name: pg_namespace.nspname. Join pg_class.relnamespace to pg_namespace.oid to follow the association between the table and its schema.

    table size: see pg_relation_size(pg_class.oid)

row count: pg_class.reltuples gives an estimate. For an exact number, run select count(*) from the table. created date: the creation date is not recorded by postgres. Some of these are also available through views in information_schema if you prefer. The structures of the views in this schema are dictated by the SQL standard, whereas the pg_catalog tables are postgres-specific.

Example of query

Starting from the query provided as a comment:
  select nspname as schema, relname as tablename,
  reltuples as rowcounts
  from pg_class c JOIN pg_catalog.pg_namespace n
   ON n.oid = c.relnamespace where relkind='r'
   and relname like '%_drop%'
   order by nspname, reltuples desc
remarks:

The underscore character is a wildcard for the LIKE operator (it matches any character), so it needs to be quoted to be interpreted literally. By default, the quote character is backslash.

    pg_relation_size() as a function call can be introduced directly in the select list.

Amended query:

  select
    nspname as schema,
    relname as tablename,
    reltuples as rowcounts,
    pg_relation_size(c.oid) AS tablesize
  from pg_class c JOIN pg_catalog.pg_namespace n
   ON n.oid = c.relnamespace where relkind='r'
   and relname like '%_drop%'
   order by nspname, reltuples desc

Your Answer

Interviews

Parent Categories