What is psql table size and row count?
My database is in TB with different schemas. I would like to search in each schema following information:
- Schema name
- Table name
- Table size
- Rows count
- Table Created date
Where table name contains: *.bak or dropped_* or *_drop
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