psql_tablesize.patch

application/octet-stream

Filename: psql_tablesize.patch
Type: application/octet-stream
Part: 0
Message: Re: psql \dt and table size

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
File+
src/bin/psql/describe.c 0 0
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index a89c938..09a4009 100644
*** a/src/bin/psql/describe.c
--- b/src/bin/psql/describe.c
*************** listTables(const char *tabtypes, const c
*** 2522,2535 ****
  						  ",\n c2.relname as \"%s\"",
  						  gettext_noop("Table"));
  
- 	if (verbose && pset.sversion >= 80100)
- 		appendPQExpBuffer(&buf,
- 						  ",\n  pg_catalog.pg_size_pretty(pg_catalog.pg_relation_size(c.oid)) as \"%s\"",
- 						  gettext_noop("Size"));
  	if (verbose)
  		appendPQExpBuffer(&buf,
  			  ",\n  pg_catalog.obj_description(c.oid, 'pg_class') as \"%s\"",
  						  gettext_noop("Description"));
  
  	appendPQExpBuffer(&buf,
  					  "\nFROM pg_catalog.pg_class c"
--- 2522,2546 ----
  						  ",\n c2.relname as \"%s\"",
  						  gettext_noop("Table"));
  
  	if (verbose)
+ 	{
+ 		/*
+ 		 * As of PostgreSQL 9.0, use pg_table_size() to show a more acurate size
+ 		 * of a table, including FSM, VM and TOAST tables.
+ 		 */
+ 		if (pset.sversion >= 90000)
+ 			appendPQExpBuffer(&buf,
+ 							  ",\n  pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as \"%s\"",
+ 							  gettext_noop("Size"));
+ 		else if (pset.sversion >= 80100)
+ 			appendPQExpBuffer(&buf,
+ 							  ",\n  pg_catalog.pg_size_pretty(pg_catalog.pg_relation_size(c.oid)) as \"%s\"",
+ 							  gettext_noop("Size"));
+ 
  		appendPQExpBuffer(&buf,
  			  ",\n  pg_catalog.obj_description(c.oid, 'pg_class') as \"%s\"",
  						  gettext_noop("Description"));
+ 	}
  
  	appendPQExpBuffer(&buf,
  					  "\nFROM pg_catalog.pg_class c"