Fix unintended assignment of sequences to the containing schema's

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.
This commit is contained in:
Tom Lane 2004-08-31 17:10:36 +00:00
parent a421b4e850
commit 617d6ea7df
4 changed files with 38 additions and 19 deletions

View 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");
}

View 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 */

View 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 */

View 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,