Skip site navigation (1) Skip section navigation (2)

psql: \d+ show tablespace of indices

From: "Qingqing Zhou" <zhouqq(at)cs(dot)toronto(dot)edu>
To: pgsql-patches(at)postgresql(dot)org
Subject: psql: \d+ show tablespace of indices
Date: 2005-05-23 10:52:43
Message-ID: d6scof$1661$1@news.hub.org (view raw or flat)
Thread:
Lists: pgsql-hackerspgsql-patches
Now \d+ is able to show the tablespace details of indices. A sample output
is followed:

test=# \d+ m
              Table "public.m"
 Column |  Type   | Modifiers | Description
--------+---------+-----------+-------------
 i      | integer |           |
 j      | integer |           |
Indexes:
    "mi" btree (i) - Tablespace: "testspace"
    "mj" btree (j)
Has OIDs: no



Index: describe.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.115
diff -c -r1.115 describe.c
*** describe.c 6 Apr 2005 05:23:32 -0000 1.115
--- describe.c 23 May 2005 10:41:48 -0000
***************
*** 37,43 ****
         const char *schemavar, const char *namevar,
         const char *altnamevar, const char *visibilityrule);

! static void add_tablespace_footer(char relkind, Oid tablespace,
         char **footers, int *count, PQExpBufferData buf);

  /*----------------
--- 37,43 ----
         const char *schemavar, const char *namevar,
         const char *altnamevar, const char *visibilityrule);

! static bool add_tablespace_footer(char relkind, Oid tablespace,
         char **footers, int *count, PQExpBufferData buf);

  /*----------------
***************
*** 1022,1028 ****
    {
     printfPQExpBuffer(&buf,
           "SELECT c2.relname, i.indisprimary, i.indisunique,
i.indisclustered, "
!      "pg_catalog.pg_get_indexdef(i.indexrelid, 0, true)\n"
           "FROM pg_catalog.pg_class c, pg_catalog.pg_class c2,
pg_catalog.pg_index i\n"
           "WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid =
c2.oid\n"
           "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname",
--- 1022,1028 ----
    {
     printfPQExpBuffer(&buf,
           "SELECT c2.relname, i.indisprimary, i.indisunique,
i.indisclustered, "
!      "pg_catalog.pg_get_indexdef(i.indexrelid, 0, true),
c2.reltablespace\n"
           "FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.p
g_index i\n"
           "WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid =
c2.oid\n"
           "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname",
***************
*** 1165,1170 ****
--- 1165,1190 ----
      if (strcmp(PQgetvalue(result1, i, 3), "t") == 0)
       appendPQExpBuffer(&buf, " CLUSTER");

+     /* Print tablespace of the index on the same line */
+     if (verbose)
+     {
+      PQExpBufferData tmpbuf;
+
+      count_footers += 1;
+      initPQExpBuffer(&tmpbuf);
+      if (add_tablespace_footer('i', atoi(PQgetvalue(result1, i, 5)),
+           footers, &count_footers, tmpbuf))
+      {
+       appendPQExpBuffer(&buf, " - ");
+       appendPQExpBuffer(&buf, tmpbuf.data);
+
+       count_footers -= 2;
+      }
+      else
+       count_footers -= 1;
+      termPQExpBuffer(&tmpbuf);
+     }
+
      footers[count_footers++] = pg_strdup(buf.data);
     }
    }
***************
*** 1316,1323 ****
   return retval;
  }

!
! static void
  add_tablespace_footer(char relkind, Oid tablespace, char **footers,
         int *count, PQExpBufferData buf)
  {
--- 1336,1343 ----
   return retval;
  }

! /* Return true if the relation uses non default tablespace; otherwise
return false */
! static bool
  add_tablespace_footer(char relkind, Oid tablespace, char **footers,
         int *count, PQExpBufferData buf)
  {
***************
*** 1336,1342 ****
           "WHERE oid = '%u';", tablespace);
     result1 = PSQLexec(buf.data, false);
     if (!result1)
!     return;
     /* Should always be the case, but.... */
     if (PQntuples(result1) > 0)
     {
--- 1356,1362 ----
           "WHERE oid = '%u';", tablespace);
     result1 = PSQLexec(buf.data, false);
     if (!result1)
!     return false;
     /* Should always be the case, but.... */
     if (PQntuples(result1) > 0)
     {
***************
*** 1345,1352 ****
--- 1365,1376 ----
      footers[(*count)++] = pg_strdup(buf.data);
     }
     PQclear(result1);
+
+    return true;
    }
   }
+
+  return false;
  }

  /*




Responses

pgsql-hackers by date

Next:From: Bruce MomjianDate: 2005-05-23 13:13:31
Subject: Re: PATCH to allow concurrent VACUUMs to not lock each other
Previous:From: José Orlando PereiraDate: 2005-05-23 10:00:19
Subject: Re: Two-phase commit issues

pgsql-patches by date

Next:From: Bruce MomjianDate: 2005-05-23 13:13:31
Subject: Re: PATCH to allow concurrent VACUUMs to not lock each other
Previous:From: Hannu KrosingDate: 2005-05-23 09:49:42
Subject: Re: PATCH to allow concurrent VACUUMs to not lock each

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group