pá 17. 9. 2021 v 11:10 odesílatel Justin Pryzby <pry...@telsasoft.com>
napsal:

> On Wed, Jul 14, 2021 at 07:42:33AM +0200, Laurenz Albe wrote:
> > Besides, schemas are not physical, but logical containers.  So I see a
> point in
> > measuring the storage used in a certain tablespace, but not so much by
> all objects
> > in a certain schema.  It might be useful for accounting purposes, though.
>
> We use only a few schemas, 1) to hide child tables; 2) to exclude some
> extended
> stats from backups, and 1-2 other things.  But it's useful to be able to
> see
> how storage is used by schema, and better to do it conveniently.
>
> I think it'd be even more useful for people who use schemas more widely
> than we
> do:
>     "Who's using all our space?"
>     \dn++
>     "Oh, it's that one - let me clean that up..."
>
> Or, "what's the pg_toast stuff, and do I need to do something about it?"
>
> > But I don't expect it to be in frequent enough demand to add a psql
> command.
> >
> > What about inventing a function pg_schema_size(regnamespace)?
>
> But for "physical" storage it's also possible to get the size from the OS,
> much
> more efficiently, using /bin/df or zfs list (assuming nothing else is using
> those filesystems).  The pg_*_size functions are inefficient, but psql
> \db+ and
> \l+ already call them anyway.
>
> For schemas, there's no way to get the size from the OS, so it's nice to
> make
> the size available from psql, conveniently.
>
> v3 patch:
>  - fixes an off by one in forkNum loop;
>  - removes an unnecessary subquery in describe.c;
>  - returns 0 rather than NULL if the schema is empty;
>  - adds pg_am_size;
>
> regression=# \dA++
>                                   List of access methods
>   Name  | Type  |       Handler        |              Description
>      |  Size
>
> --------+-------+----------------------+----------------------------------------+---------
>  brin   | Index | brinhandler          | block range index (BRIN) access
> method | 744 kB
>  btree  | Index | bthandler            | b-tree index access method
>      | 21 MB
>  gin    | Index | ginhandler           | GIN index access method
>       | 2672 kB
>  gist   | Index | gisthandler          | GiST index access method
>      | 2800 kB
>  hash   | Index | hashhandler          | hash index access method
>      | 2112 kB
>  heap   | Table | heap_tableam_handler | heap table access method
>      | 60 MB
>  heap2  | Table | heap_tableam_handler |
>       | 120 kB
>  spgist | Index | spghandler           | SP-GiST index access method
>       | 5840 kB
> (8 rows)
>
> regression=# \dn++
>                                    List of schemas
>         Name        |  Owner  | Access privileges  |      Description
>  |  Size
>
> --------------------+---------+--------------------+------------------------+---------
>  fkpart3            | pryzbyj |                    |
>   | 168 kB
>  fkpart4            | pryzbyj |                    |
>   | 104 kB
>  fkpart5            | pryzbyj |                    |
>   | 40 kB
>  fkpart6            | pryzbyj |                    |
>   | 48 kB
>  mvtest_mvschema    | pryzbyj |                    |
>   | 16 kB
>  public             | pryzbyj | pryzbyj=UC/pryzbyj+| standard public
> schema | 69 MB
>                     |         | =UC/pryzbyj        |
>   |
>  regress_indexing   | pryzbyj |                    |
>   | 48 kB
>  regress_rls_schema | pryzbyj |                    |
>   | 0 bytes
>  regress_schema_2   | pryzbyj |                    |
>   | 0 bytes
>  testxmlschema      | pryzbyj |                    |
>   | 24 kB
> (10 rows)
>
>
I tested this patch. It looks well. The performance is good enough. I got
the result for a schema with 100K tables in 3 seconds.

I am not sure if using \dt+ and \dP+ without change is a good idea. I can
imagine \dt+ and \dt++. \dP can exist just only in ++ form or we can ignore
it (like now, and support \dP+ and \dP++) with same result

I can live with the proposed patch, and I understand why  ++ was
introduced. But I am still not sure it is really user friendly. I prefer to
extend \dA and \dn with some columns (\dA has only two columns and \dn has
two columns too), and then we don't need special ++ variants for sizes.
Using three levels of detail looks not too practical (more when the basic
reports \dA and \dn) are really very simple).

Regards

Pavel



-- 
> Justin
>

Reply via email to