Fix unintended assignment of sequences to the containing schema's
authorTom Lane
Tue, 31 Aug 2004 17:10:36 +0000 (17:10 +0000)
committerTom Lane
Tue, 31 Aug 2004 17:10:36 +0000 (17:10 +0000)
default tablespace --- they should always go in the database's default
tablespace.  Adjust heap_create() API so that it is passed the relkind
to make this easier; should simplify any further tweaking of the same
sort.

src/backend/bootstrap/bootparse.y
src/backend/catalog/heap.c
src/backend/catalog/index.c
src/include/catalog/heap.h

index c93e176f83bf1e2eb3ce7634af8fb546e13c8749..9bab19784a4bff10a203f13c62636fb4c36827f2 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.72 2004/08/29 04:12:24 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.73 2004/08/31 17:10:36 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -184,8 +184,8 @@ Boot_CreateStmt:
                                                   PG_CATALOG_NAMESPACE,
                                                   $3 ? GLOBALTABLESPACE_OID : 0,
                                                   tupdesc,
+                                                  RELKIND_RELATION,
                                                   $3,
-                                                  true,
                                                   true);
                        elog(DEBUG4, "bootstrap relation created");
                    }
index 5cf6c5fa6d5ddcdac1d209761ac24619d3188029..f5ec158d7a0811857432e6c298babc36e4953541 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.275 2004/08/29 05:06:41 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.276 2004/08/31 17:10:36 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -201,12 +201,13 @@ heap_create(const char *relname,
            Oid relnamespace,
            Oid reltablespace,
            TupleDesc tupDesc,
+           char relkind,
            bool shared_relation,
-           bool create_storage,
            bool allow_system_table_mods)
 {
    Oid         relid;
    bool        nailme = false;
+   bool        create_storage;
    Relation    rel;
 
    /*
@@ -263,6 +264,34 @@ heap_create(const char *relname,
    else
        relid = newoid();
 
+   /*
+    * Decide if we need storage or not, and handle a couple other
+    * special cases for particular relkinds.
+    */
+   switch (relkind)
+   {
+       case RELKIND_VIEW:
+       case RELKIND_COMPOSITE_TYPE:
+           create_storage = false;
+           /*
+            * Force reltablespace to zero if the relation has no physical
+            * storage.  This is mainly just for cleanliness' sake.
+            */
+           reltablespace = InvalidOid;
+           break;
+       case RELKIND_SEQUENCE:
+           create_storage = true;
+           /*
+            * Force reltablespace to zero for sequences, since we don't
+            * support moving them around into different tablespaces.
+            */
+           reltablespace = InvalidOid;
+           break;
+       default:
+           create_storage = true;
+           break;
+   }
+
    /*
     * Never allow a pg_class entry to explicitly specify the database's
     * default tablespace in reltablespace; force it to zero instead. This
@@ -275,13 +304,6 @@ heap_create(const char *relname,
    if (reltablespace == MyDatabaseTableSpace)
        reltablespace = InvalidOid;
 
-   /*
-    * Also, force reltablespace to zero if the relation has no physical
-    * storage.  This is mainly just for cleanliness' sake.
-    */
-   if (!create_storage)
-       reltablespace = InvalidOid;
-
    /*
     * build the relcache entry.
     */
@@ -728,16 +750,13 @@ heap_create_with_catalog(const char *relname,
     * Create the relcache entry (mostly dummy at this point) and the
     * physical disk file.  (If we fail further down, it's the smgr's
     * responsibility to remove the disk file again.)
-    *
-    * NB: create a physical file only if it's not a view or type relation.
     */
    new_rel_desc = heap_create(relname,
                               relnamespace,
                               reltablespace,
                               tupdesc,
+                              relkind,
                               shared_relation,
-                              (relkind != RELKIND_VIEW &&
-                               relkind != RELKIND_COMPOSITE_TYPE),
                               allow_system_table_mods);
 
    /* Fetch the relation OID assigned by heap_create */
index bed06fc5383e7865030b1760c119e9d8eda78117..cace4852d5122343e6216e403866e03f2e87b47f 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.238 2004/08/29 05:06:41 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.239 2004/08/31 17:10:36 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -543,8 +543,8 @@ index_create(Oid heapRelationId,
                                namespaceId,
                                tableSpaceId,
                                indexTupDesc,
+                               RELKIND_INDEX,
                                shared_relation,
-                               true,
                                allow_system_table_mods);
 
    /* Fetch the relation OID assigned by heap_create */
index 92adcb88e2b0b9d43abead5e189036be532d173d..98c1eac5b035e13b8e1d8b9bd0c8750e578189fa 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.70 2004/08/29 04:13:04 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.71 2004/08/31 17:10:36 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,8 +39,8 @@ extern Relation heap_create(const char *relname,
            Oid relnamespace,
            Oid reltablespace,
            TupleDesc tupDesc,
+           char relkind,
            bool shared_relation,
-           bool create_storage,
            bool allow_system_table_mods);
 
 extern Oid heap_create_with_catalog(const char *relname,