*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
PG_CATALOG_NAMESPACE,
$3 ? GLOBALTABLESPACE_OID : 0,
tupdesc,
+ RELKIND_RELATION,
$3,
- true,
true);
elog(DEBUG4, "bootstrap relation created");
}
*
*
* 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
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;
/*
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
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.
*/
* 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 */
* 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 $
*
*-------------------------------------------------------------------------
*/
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,