diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/adt/dbsize.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 5bf80a26a9..6d5fe23c5f 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -1356,18 +1356,28 @@ pgxc_exec_sizefunc(Oid relOid, char *funcname, char *extra_arg) char *relname = NULL; StringInfoData buf; Relation rel; + bool istemp; rel = relation_open(relOid, AccessShareLock); + istemp = (rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP); - if (rel->rd_locator_info) - /* get relation name including any needed schema prefix and quoting */ - relname = quote_qualified_identifier(get_namespace_name(rel->rd_rel->relnamespace), - RelationGetRelationName(rel)); initStringInfo(&buf); + /* get relation name including any needed schema prefix and quoting */ if (!extra_arg) - appendStringInfo(&buf, "SELECT pg_catalog.%s('%s')", funcname, relname); + appendStringInfo(&buf, "SELECT pg_catalog.%s(c.oid) " + "FROM pg_class c JOIN pg_namespace nc " + " ON c.oid = nc.oid ", funcname); + else + appendStringInfo(&buf, "SELECT pg_catalog.%s(c.oid, '%s') " + "FROM pg_class c JOIN pg_namespace nc " + " ON c.oid = nc.oid ", funcname, extra_arg); + + if (!istemp) + appendStringInfo(&buf, "WHERE relname = '%s' AND nc.nspname = '%s'", + relname, get_namespace_name(rel->rd_rel->relnamespace)); else - appendStringInfo(&buf, "SELECT pg_catalog.%s('%s', '%s')", funcname, relname, extra_arg); + appendStringInfo(&buf, "WHERE relname = '%s' AND " + " nc.oid = pg_my_temp_schema()", relname); numnodes = get_pgxc_classnodes(RelationGetRelid(rel), &nodelist); |