Now \d show tablespace of indices per discussion.

test=# \d e
       Table "public.e"
 Column |  Type   | Modifiers
--------+---------+-----------
 i      | integer | not null
 j      | integer | not null
 k      | integer |
Indexes:
    "e_pkey" PRIMARY KEY, btree (i, j), tablespace "haha"
    "ei" btree (i)
    "ej" btree (j), tablespace "haha"
    "ek" btree (k)
Tablespace: "haha"

Qingqing Zhou
This commit is contained in:
Bruce Momjian 2005-06-14 23:59:31 +00:00
parent 8b84aebddf
commit b4132fd0ac
1 changed files with 38 additions and 11 deletions

View File

@ -3,7 +3,7 @@
* *
* Copyright (c) 2000-2005, PostgreSQL Global Development Group * Copyright (c) 2000-2005, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.116 2005/06/14 02:57:41 momjian Exp $ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.117 2005/06/14 23:59:31 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "describe.h" #include "describe.h"
@ -37,8 +37,8 @@ static void processNamePattern(PQExpBuffer buf, const char *pattern,
const char *schemavar, const char *namevar, const char *schemavar, const char *namevar,
const char *altnamevar, const char *visibilityrule); const char *altnamevar, const char *visibilityrule);
static void add_tablespace_footer(char relkind, Oid tablespace, static bool add_tablespace_footer(char relkind, Oid tablespace, char **footers,
char **footers, int *count, PQExpBufferData buf); int *count, PQExpBufferData buf, bool newline);
/*---------------- /*----------------
* Handlers for various slash commands displaying some sort of list * Handlers for various slash commands displaying some sort of list
@ -942,7 +942,7 @@ describeOneTableDetails(const char *schemaname,
footers = pg_malloc_zero(4 * sizeof(*footers)); footers = pg_malloc_zero(4 * sizeof(*footers));
footers[count_footers++] = pg_strdup(tmpbuf.data); footers[count_footers++] = pg_strdup(tmpbuf.data);
add_tablespace_footer(tableinfo.relkind, tableinfo.tablespace, add_tablespace_footer(tableinfo.relkind, tableinfo.tablespace,
footers, &count_footers, tmpbuf); footers, &count_footers, tmpbuf, true);
footers[count_footers] = NULL; footers[count_footers] = NULL;
} }
@ -1022,7 +1022,7 @@ describeOneTableDetails(const char *schemaname,
{ {
printfPQExpBuffer(&buf, printfPQExpBuffer(&buf,
"SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, " "SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, "
"pg_catalog.pg_get_indexdef(i.indexrelid, 0, true)\n" "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.pg_index i\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" "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", "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname",
@ -1142,6 +1142,7 @@ describeOneTableDetails(const char *schemaname,
{ {
const char *indexdef; const char *indexdef;
const char *usingpos; const char *usingpos;
PQExpBufferData tmpbuf;
/* Output index name */ /* Output index name */
printfPQExpBuffer(&buf, _(" \"%s\""), printfPQExpBuffer(&buf, _(" \"%s\""),
@ -1165,6 +1166,22 @@ describeOneTableDetails(const char *schemaname,
if (strcmp(PQgetvalue(result1, i, 3), "t") == 0) if (strcmp(PQgetvalue(result1, i, 3), "t") == 0)
appendPQExpBuffer(&buf, " CLUSTER"); appendPQExpBuffer(&buf, " CLUSTER");
/* Print tablespace of the index on the same line */
count_footers += 1;
initPQExpBuffer(&tmpbuf);
if (add_tablespace_footer('i',
atooid(PQgetvalue(result1, i, 5)),
footers, &count_footers, tmpbuf, false))
{
appendPQExpBuffer(&buf, ", ");
appendPQExpBuffer(&buf, tmpbuf.data);
count_footers -= 2;
}
else
count_footers -= 1;
termPQExpBuffer(&tmpbuf);
footers[count_footers++] = pg_strdup(buf.data); footers[count_footers++] = pg_strdup(buf.data);
} }
} }
@ -1265,7 +1282,7 @@ describeOneTableDetails(const char *schemaname,
} }
add_tablespace_footer(tableinfo.relkind, tableinfo.tablespace, add_tablespace_footer(tableinfo.relkind, tableinfo.tablespace,
footers, &count_footers, buf); footers, &count_footers, buf, true);
/* end of list marker */ /* end of list marker */
footers[count_footers] = NULL; footers[count_footers] = NULL;
@ -1317,9 +1334,13 @@ error_return:
} }
static void /*
* Return true if the relation uses non default tablespace;
* otherwise return false
*/
static bool
add_tablespace_footer(char relkind, Oid tablespace, char **footers, add_tablespace_footer(char relkind, Oid tablespace, char **footers,
int *count, PQExpBufferData buf) int *count, PQExpBufferData buf, bool newline)
{ {
/* relkinds for which we support tablespaces */ /* relkinds for which we support tablespaces */
if (relkind == 'r' || relkind == 'i') if (relkind == 'r' || relkind == 'i')
@ -1336,17 +1357,23 @@ add_tablespace_footer(char relkind, Oid tablespace, char **footers,
"WHERE oid = '%u';", tablespace); "WHERE oid = '%u';", tablespace);
result1 = PSQLexec(buf.data, false); result1 = PSQLexec(buf.data, false);
if (!result1) if (!result1)
return; return false;
/* Should always be the case, but.... */ /* Should always be the case, but.... */
if (PQntuples(result1) > 0) if (PQntuples(result1) > 0)
{ {
printfPQExpBuffer(&buf, _("Tablespace: \"%s\""), printfPQExpBuffer(&buf,
PQgetvalue(result1, 0, 0)); newline?_("Tablespace: \"%s\""):_("tablespace \"%s\""),
PQgetvalue(result1, 0, 0));
footers[(*count)++] = pg_strdup(buf.data); footers[(*count)++] = pg_strdup(buf.data);
} }
PQclear(result1); PQclear(result1);
return true;
} }
} }
return false;
} }
/* /*