aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/bootstrap/bootparse.y4
-rw-r--r--src/backend/catalog/heap.c45
-rw-r--r--src/backend/catalog/index.c4
-rw-r--r--src/include/catalog/heap.h4
4 files changed, 38 insertions, 19 deletions
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index c93e176f83b..9bab19784a4 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -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");
}
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5cf6c5fa6d5..f5ec158d7a0 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -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;
/*
@@ -264,6 +265,34 @@ heap_create(const char *relname,
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
* ensures that if the database is cloned with a different default
@@ -276,13 +305,6 @@ heap_create(const char *relname,
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.
*/
rel = RelationBuildLocalRelation(relname,
@@ -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 */
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index bed06fc5383..cace4852d51 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -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 */
diff --git a/src/include/catalog/heap.h b/src/include/catalog/heap.h
index 92adcb88e2b..98c1eac5b03 100644
--- a/src/include/catalog/heap.h
+++ b/src/include/catalog/heap.h
@@ -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,