diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index a89c938..f21d8a1 100644 *** a/src/bin/psql/describe.c --- b/src/bin/psql/describe.c *************** listTables(const char *tabtypes, const c *** 2522,2531 **** ",\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\"", --- 2522,2546 ---- ",\n c2.relname as \"%s\"", gettext_noop("Table")); ! if (pset.sversion >= 80100 && pset.sversion < 90000) appendPQExpBuffer(&buf, ",\n pg_catalog.pg_size_pretty(pg_catalog.pg_relation_size(c.oid)) as \"%s\"", gettext_noop("Size")); + else if (pset.sversion >= 90000) { + /* + * 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 (showTables) + appendPQExpBuffer(&buf, + ",\n pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as \"%s\"", + gettext_noop("Size")); + else + 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\"",