Allow psql to use 7.4.X database by not referencing tablespaces.
authorBruce Momjian
Fri, 20 Aug 2004 20:18:23 +0000 (20:18 +0000)
committerBruce Momjian
Fri, 20 Aug 2004 20:18:23 +0000 (20:18 +0000)
Greg Sabino Mullan

src/bin/psql/describe.c
src/bin/psql/settings.h
src/bin/psql/startup.c

index 328a1c079f1ca043ae96de8788572b96e0915689..e558b867092d7cbaeec1a29e7ff6480222ab2aaa 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2003, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.103 2004/07/15 03:56:06 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.104 2004/08/20 20:18:23 momjian Exp $
  */
 #include "postgres_fe.h"
 #include "describe.h"
@@ -112,6 +112,12 @@ describeTablespaces(const char *pattern, bool verbose)
    PGresult   *res;
    printQueryOpt myopt = pset.popt;
 
+   if (pset.sversion < 70500) {
+           fprintf(stderr, _("This server version (%d) does not support tablespaces.\n"),
+                           pset.sversion);
+           return true;
+   }
+
    initPQExpBuffer(&buf);
 
    printfPQExpBuffer(&buf,
@@ -706,8 +712,9 @@ describeOneTableDetails(const char *schemaname,
    /* Get general table info */
    printfPQExpBuffer(&buf,
     "SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules, \n" 
-                   "relhasoids, reltablespace \n"
+                   "relhasoids %s \n"
                      "FROM pg_catalog.pg_class WHERE oid = '%s'",
+                     pset.sversion >= 70500 ? ", reltablespace" : "",
                      oid);
    res = PSQLexec(buf.data, false);
    if (!res)
@@ -729,7 +736,8 @@ describeOneTableDetails(const char *schemaname,
    tableinfo.hasindex = strcmp(PQgetvalue(res, 0, 0), "t") == 0;
    tableinfo.hasrules = strcmp(PQgetvalue(res, 0, 4), "t") == 0;
    tableinfo.hasoids = strcmp(PQgetvalue(res, 0, 5), "t") == 0;
-   tableinfo.tablespace = atooid(PQgetvalue(res, 0, 6));
+   tableinfo.tablespace = (pset.sversion >= 70500) ? 
+           atooid(PQgetvalue(res, 0, 6)) : 0;
    PQclear(res);
 
    headers[0] = _("Column");
@@ -932,8 +940,8 @@ describeOneTableDetails(const char *schemaname,
 
            footers = pg_malloc_zero(4 * sizeof(*footers));
            footers[count_footers++] = pg_strdup(tmpbuf.data);
-           add_tablespace_footer(tableinfo.relkind, tableinfo.tablespace,
-               footers, &count_footers, tmpbuf);
+           add_tablespace_footer(tableinfo.relkind, tableinfo.tablespace,
+                                                       footers, &count_footers, tmpbuf);
            footers[count_footers] = NULL;
 
        }
index d8766b045a88336d8ed7bee452f3c463128e50f3..74046e9d3a1c2937ca3a05ac8c9e8abc028109df 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2003, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/settings.h,v 1.18 2004/05/12 13:38:45 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/settings.h,v 1.19 2004/08/20 20:18:23 momjian Exp $
  */
 #ifndef SETTINGS_H
 #define SETTINGS_H
@@ -41,7 +41,7 @@ typedef struct _psqlSettings
    FILE       *cur_cmd_source; /* describe the status of the current main
                                 * loop */
    bool        cur_cmd_interactive;
-
+   int     sversion; /* backend server version */
    const char *progname;       /* in case you renamed psql */
    char       *inputfile;      /* for error reporting */
    unsigned    lineno;         /* also for error reporting */
index 2bd2b50aff03179ee457e167570c190017d37ce9..2773e92a61fe2e9bf38cb00e41072407cc777248 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2003, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.96 2004/08/18 02:59:11 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.97 2004/08/20 20:18:23 momjian Exp $
  */
 #include "postgres_fe.h"
 
@@ -217,6 +217,9 @@ main(int argc, char *argv[])
 
    SyncVariables();
 
+   /* Grab the backend server version */
+   pset.sversion = PQserverVersion(pset.db);
+
    if (options.action == ACT_LIST_DB)
    {
        int         success = listAllDbs(false);