mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
First phase of project to use fixed OIDs for all system catalogs and
indexes. Extend the macros in include/catalog/*.h to carry the info about hand-assigned OIDs, and adjust the genbki script and bootstrap code to make the relations actually get those OIDs. Remove the small number of RelOid_pg_foo macros that we had in favor of a complete set named like the catname.h and indexing.h macros. Next phase will get rid of internal use of names for looking up catalogs and indexes; but this completes the changes forcing an initdb, so it looks like a good place to commit. Along the way, I made the shared relations (pg_database etc) not be 'bootstrap' relations any more, so as to reduce the number of hardwired entries and simplify changing those relations in future. I'm not sure whether they ever really needed to be handled as bootstrap relations, but it seems to work fine to not do so now.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.75 2004/12/31 21:59:34 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.76 2005/04/14 01:38:15 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -50,6 +50,8 @@
|
||||
#include "utils/nabstime.h"
|
||||
#include "utils/rel.h"
|
||||
|
||||
#define atooid(x) ((Oid) strtoul((x), NULL, 10))
|
||||
|
||||
|
||||
static void
|
||||
do_start(void)
|
||||
@@ -91,11 +93,10 @@ int num_columns_read = 0;
|
||||
%type <ival> boot_const boot_ident
|
||||
%type <ival> optbootstrap optsharedrelation optwithoutoids
|
||||
%type <ival> boot_tuple boot_tuplelist
|
||||
%type <oidval> optoideq
|
||||
%type <oidval> oidspec optoideq
|
||||
|
||||
%token <ival> CONST_P ID
|
||||
%token OPEN XCLOSE XCREATE INSERT_TUPLE
|
||||
%token STRING XDEFINE
|
||||
%token XDECLARE INDEX ON USING XBUILD INDICES UNIQUE
|
||||
%token COMMA EQUALS LPAREN RPAREN
|
||||
%token OBJ_ID XBOOTSTRAP XSHARED_RELATION XWITHOUT_OIDS NULLVAL
|
||||
@@ -151,14 +152,15 @@ Boot_CloseStmt:
|
||||
;
|
||||
|
||||
Boot_CreateStmt:
|
||||
XCREATE optbootstrap optsharedrelation optwithoutoids boot_ident LPAREN
|
||||
XCREATE optbootstrap optsharedrelation optwithoutoids boot_ident oidspec LPAREN
|
||||
{
|
||||
do_start();
|
||||
numattr = 0;
|
||||
elog(DEBUG4, "creating%s%s relation %s",
|
||||
elog(DEBUG4, "creating%s%s relation %s %u",
|
||||
$2 ? " bootstrap" : "",
|
||||
$3 ? " shared" : "",
|
||||
LexIDStr($5));
|
||||
LexIDStr($5),
|
||||
$6);
|
||||
}
|
||||
boot_typelist
|
||||
{
|
||||
@@ -183,6 +185,7 @@ Boot_CreateStmt:
|
||||
boot_reldesc = heap_create(LexIDStr($5),
|
||||
PG_CATALOG_NAMESPACE,
|
||||
$3 ? GLOBALTABLESPACE_OID : 0,
|
||||
$6,
|
||||
tupdesc,
|
||||
RELKIND_RELATION,
|
||||
$3,
|
||||
@@ -196,6 +199,7 @@ Boot_CreateStmt:
|
||||
id = heap_create_with_catalog(LexIDStr($5),
|
||||
PG_CATALOG_NAMESPACE,
|
||||
$3 ? GLOBALTABLESPACE_OID : 0,
|
||||
$6,
|
||||
tupdesc,
|
||||
RELKIND_RELATION,
|
||||
$3,
|
||||
@@ -235,15 +239,16 @@ Boot_InsertStmt:
|
||||
;
|
||||
|
||||
Boot_DeclareIndexStmt:
|
||||
XDECLARE INDEX boot_ident ON boot_ident USING boot_ident LPAREN boot_index_params RPAREN
|
||||
XDECLARE INDEX boot_ident oidspec ON boot_ident USING boot_ident LPAREN boot_index_params RPAREN
|
||||
{
|
||||
do_start();
|
||||
|
||||
DefineIndex(makeRangeVar(NULL, LexIDStr($5)),
|
||||
DefineIndex(makeRangeVar(NULL, LexIDStr($6)),
|
||||
LexIDStr($3),
|
||||
LexIDStr($7),
|
||||
$4,
|
||||
LexIDStr($8),
|
||||
NULL,
|
||||
$9,
|
||||
$10,
|
||||
NULL, NIL,
|
||||
false, false, false,
|
||||
false, false, true, false);
|
||||
@@ -252,15 +257,16 @@ Boot_DeclareIndexStmt:
|
||||
;
|
||||
|
||||
Boot_DeclareUniqueIndexStmt:
|
||||
XDECLARE UNIQUE INDEX boot_ident ON boot_ident USING boot_ident LPAREN boot_index_params RPAREN
|
||||
XDECLARE UNIQUE INDEX boot_ident oidspec ON boot_ident USING boot_ident LPAREN boot_index_params RPAREN
|
||||
{
|
||||
do_start();
|
||||
|
||||
DefineIndex(makeRangeVar(NULL, LexIDStr($6)),
|
||||
DefineIndex(makeRangeVar(NULL, LexIDStr($7)),
|
||||
LexIDStr($4),
|
||||
LexIDStr($8),
|
||||
$5,
|
||||
LexIDStr($9),
|
||||
NULL,
|
||||
$10,
|
||||
$11,
|
||||
NULL, NIL,
|
||||
true, false, false,
|
||||
false, false, true, false);
|
||||
@@ -323,9 +329,13 @@ boot_type_thing:
|
||||
}
|
||||
;
|
||||
|
||||
oidspec:
|
||||
boot_ident { $$ = atooid(LexIDStr($1)); }
|
||||
;
|
||||
|
||||
optoideq:
|
||||
OBJ_ID EQUALS boot_ident { $$ = atol(LexIDStr($3)); }
|
||||
| { $$ = (Oid) 0; }
|
||||
OBJ_ID EQUALS oidspec { $$ = $3; }
|
||||
| { $$ = (Oid) 0; }
|
||||
;
|
||||
|
||||
boot_tuplelist:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
$PostgreSQL: pgsql/src/backend/catalog/README,v 1.8 2003/11/29 19:51:42 pgsql Exp $
|
||||
$PostgreSQL: pgsql/src/backend/catalog/README,v 1.9 2005/04/14 01:38:15 tgl Exp $
|
||||
|
||||
This directory contains .c files that manipulate the system catalogs;
|
||||
src/include/catalog contains the .h files that define the structure
|
||||
@@ -6,7 +6,7 @@ of the system catalogs.
|
||||
|
||||
When the compile-time scripts (such as Gen_fmgrtab.sh and genbki.sh)
|
||||
execute, they grep the DATA statements out of the .h files and munge
|
||||
these in order to generate the .bki files. The .bki files are then
|
||||
these in order to generate the postgres.bki file. The .bki file is then
|
||||
used as input to initdb (which is just a wrapper around postgres
|
||||
running single-user in bootstrapping mode) in order to generate the
|
||||
initial (template) system catalog relation files.
|
||||
@@ -30,8 +30,8 @@ contains back-pointers into pg_type (pg_proc.proargtypes). For such
|
||||
cases, the OID assigned to a tuple may be explicitly set by use of the
|
||||
"OID = n" clause of the .bki insert statement. If no such pointers are
|
||||
required to a given tuple, then the OID = n clause may be omitted
|
||||
(then the system generates a random OID in the usual way, or leaves it
|
||||
0 in a catalog that has no OIDs). In practice we usually preassign OIDs
|
||||
(then the system generates an OID in the usual way, or leaves it 0 in a
|
||||
catalog that has no OIDs). In practice we usually preassign OIDs
|
||||
for all or none of the pre-loaded tuples in a given catalog, even if only
|
||||
some of them are actually cross-referenced.
|
||||
|
||||
@@ -39,42 +39,36 @@ some of them are actually cross-referenced.
|
||||
be known directly in the C code. In such cases, put a #define in the
|
||||
catalog's .h file, and use the #define symbol in the C code. Writing
|
||||
the actual numeric value of any OID in C code is considered very bad form.
|
||||
(Direct references to pg_proc OIDs are common enough that there's a special
|
||||
Direct references to pg_proc OIDs are common enough that there's a special
|
||||
mechanism to create the necessary #define's automatically: see
|
||||
backend/utils/Gen_fmgrtab.sh. For all the other system catalogs, you have
|
||||
to manually create any #define's you need.)
|
||||
backend/utils/Gen_fmgrtab.sh. We also have standard conventions for setting
|
||||
up #define's for the pg_class OIDs of system catalogs and indexes. For all
|
||||
the other system catalogs, you have to manually create any #define's you
|
||||
need.
|
||||
|
||||
- If you need to find a valid OID for a tuple that will be referred to by
|
||||
others, use the unused_oids script. It generates inclusive ranges of
|
||||
- If you need to find a valid OID for a new predefined tuple,
|
||||
use the unused_oids script. It generates inclusive ranges of
|
||||
*unused* OIDs (e.g., the line "45-900" means OIDs 45 through 900 have
|
||||
not been allocated yet). Currently, OIDs 1-9999 are reserved for manual
|
||||
assignment; the unused_oids script simply looks through the include/catalog
|
||||
headers to see which ones do not appear in "OID =" clauses.
|
||||
headers to see which ones do not appear in "OID =" clauses in DATA lines.
|
||||
(As of Postgres 8.1, it also looks at CATALOG and DECLARE_INDEX lines.)
|
||||
You can also use the duplicate_oids script to check for mistakes.
|
||||
|
||||
- OIDs 10000-16383 are reserved for assignment by the genbki.sh script:
|
||||
it will insert these OIDs if it sees a clause "OID = 0" in a DATA
|
||||
statement. You would typically use this feature if you don't care exactly
|
||||
which OID is assigned to a catalog row (because it has no cross-references
|
||||
you need to hardwire) but you want to give it a DESCR entry. The DESCR macro
|
||||
will not work for rows that don't have any OID at genbki.sh time.
|
||||
|
||||
- The OID counter starts at 16384 at bootstrap. If a catalog row is in a
|
||||
table that requires OIDs, but no OID was preassigned by hand or by genbki.sh,
|
||||
then it will receive an OID of 16384 or above.
|
||||
- The OID counter starts at 10000 at bootstrap. If a catalog row is in a
|
||||
table that requires OIDs, but no OID was preassigned by an "OID =" clause,
|
||||
then it will receive an OID of 10000 or above.
|
||||
|
||||
- To create a "BOOTSTRAP" table you have to do a lot of extra work: these
|
||||
tables are not created through a normal CREATE TABLE operation, but spring
|
||||
into existence when first written to during initdb. Therefore, you must
|
||||
manually create appropriate entries for them in the pre-loaded contents of
|
||||
pg_class, pg_attribute, and pg_type. You'll also need to add code to function
|
||||
heap_create() in heap.c to force the correct OID to be assigned when the table
|
||||
is first referenced. (It's near the top of the function with the comment
|
||||
beginning in "Real ugly stuff".) Avoid making new catalogs be bootstrap
|
||||
pg_class, pg_attribute, and pg_type. Avoid making new catalogs be bootstrap
|
||||
catalogs if at all possible; generally, only tables that must be written to
|
||||
in order to create a table should be bootstrapped.
|
||||
|
||||
- Certain BOOTSTRAP tables must be at the start of the Makefile
|
||||
POSTGRES_BKI_SRCS variable, as these will not be created through the standard
|
||||
POSTGRES_BKI_SRCS variable, as these cannot be created through the standard
|
||||
heap_create_with_catalog process, because it needs these tables to exist
|
||||
already. The list of files this currently includes is:
|
||||
pg_proc.h pg_type.h pg_attribute.h pg_class.h
|
||||
@@ -96,7 +90,10 @@ piece of code will likely perform "typetup->typdelim" (or, worse,
|
||||
"typetyp->typelem", which follows typdelim). This will result in
|
||||
random errors or even segmentation violations. Hence, do NOT insert
|
||||
catalog tuples that contain NULL attributes except in their
|
||||
variable-length portions!
|
||||
variable-length portions! (The bootstrapping code is fairly good about
|
||||
marking NOT NULL each of the columns that can legally be referenced via
|
||||
C struct declarations ... but those markings won't be enforced against
|
||||
DATA commands, so you must get it right in a DATA line.)
|
||||
|
||||
- Modification of the catalogs must be performed with the proper
|
||||
updating of catalog indexes! That is, most catalogs have indexes
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.42 2005/02/22 04:35:34 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.43 2005/04/14 01:38:15 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -29,8 +29,10 @@
|
||||
#include "catalog/pg_depend.h"
|
||||
#include "catalog/pg_language.h"
|
||||
#include "catalog/pg_opclass.h"
|
||||
#include "catalog/pg_proc.h"
|
||||
#include "catalog/pg_rewrite.h"
|
||||
#include "catalog/pg_trigger.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "commands/comment.h"
|
||||
#include "commands/defrem.h"
|
||||
#include "commands/proclang.h"
|
||||
@@ -907,7 +909,7 @@ recordDependencyOnSingleRelExpr(const ObjectAddress *depender,
|
||||
{
|
||||
ObjectAddress *thisobj = context.addrs.refs + oldref;
|
||||
|
||||
if (thisobj->classId == RelOid_pg_class &&
|
||||
if (thisobj->classId == RelationRelationId &&
|
||||
thisobj->objectId == relId)
|
||||
{
|
||||
/* Move this ref into self_addrs */
|
||||
@@ -1305,9 +1307,9 @@ term_object_addresses(ObjectAddresses *addrs)
|
||||
static void
|
||||
init_object_classes(void)
|
||||
{
|
||||
object_classes[OCLASS_CLASS] = RelOid_pg_class;
|
||||
object_classes[OCLASS_PROC] = RelOid_pg_proc;
|
||||
object_classes[OCLASS_TYPE] = RelOid_pg_type;
|
||||
object_classes[OCLASS_CLASS] = RelationRelationId;
|
||||
object_classes[OCLASS_PROC] = ProcedureRelationId;
|
||||
object_classes[OCLASS_TYPE] = TypeRelationId;
|
||||
object_classes[OCLASS_CAST] = get_system_catalog_relid(CastRelationName);
|
||||
object_classes[OCLASS_CONSTRAINT] = get_system_catalog_relid(ConstraintRelationName);
|
||||
object_classes[OCLASS_CONVERSION] = get_system_catalog_relid(ConversionRelationName);
|
||||
@@ -1333,15 +1335,15 @@ getObjectClass(const ObjectAddress *object)
|
||||
/* Easy for the bootstrapped catalogs... */
|
||||
switch (object->classId)
|
||||
{
|
||||
case RelOid_pg_class:
|
||||
case RelationRelationId:
|
||||
/* caller must check objectSubId */
|
||||
return OCLASS_CLASS;
|
||||
|
||||
case RelOid_pg_proc:
|
||||
case ProcedureRelationId:
|
||||
Assert(object->objectSubId == 0);
|
||||
return OCLASS_PROC;
|
||||
|
||||
case RelOid_pg_type:
|
||||
case TypeRelationId:
|
||||
Assert(object->objectSubId == 0);
|
||||
return OCLASS_TYPE;
|
||||
}
|
||||
@@ -1560,7 +1562,7 @@ getObjectDescription(const ObjectAddress *object)
|
||||
|
||||
attrdef = (Form_pg_attrdef) GETSTRUCT(tup);
|
||||
|
||||
colobject.classId = RelOid_pg_class;
|
||||
colobject.classId = RelationRelationId;
|
||||
colobject.objectId = attrdef->adrelid;
|
||||
colobject.objectSubId = attrdef->adnum;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $PostgreSQL: pgsql/src/backend/catalog/genbki.sh,v 1.34 2005/04/13 18:54:56 tgl Exp $
|
||||
# $PostgreSQL: pgsql/src/backend/catalog/genbki.sh,v 1.35 2005/04/14 01:38:16 tgl Exp $
|
||||
#
|
||||
# NOTES
|
||||
# non-essential whitespace is removed from the generated file.
|
||||
@@ -192,7 +192,7 @@ comment_level > 0 { next; }
|
||||
# ----------------
|
||||
# DATA() statements are basically passed right through after
|
||||
# stripping off the DATA( and the ) on the end.
|
||||
# Remember any explicit OID for use by DESCR().
|
||||
# Remember the OID for use by DESCR().
|
||||
# ----------------
|
||||
/^DATA\(/ {
|
||||
data = substr($0, 6, length($0) - 6);
|
||||
@@ -221,13 +221,19 @@ comment_level > 0 { next; }
|
||||
# end any prior catalog data insertions before starting a define index
|
||||
# ----
|
||||
if (reln_open == 1) {
|
||||
# print "show";
|
||||
print "close " catalog;
|
||||
reln_open = 0;
|
||||
}
|
||||
|
||||
data = substr($0, 15, length($0) - 15);
|
||||
print "declare index " data
|
||||
pos = index(data, ",");
|
||||
iname = substr(data, 1, pos-1);
|
||||
data = substr(data, pos+1, length(data)-pos);
|
||||
pos = index(data, ",");
|
||||
ioid = substr(data, 1, pos-1);
|
||||
data = substr(data, pos+1, length(data)-pos);
|
||||
|
||||
print "declare index " iname " " ioid " " data
|
||||
}
|
||||
|
||||
/^DECLARE_UNIQUE_INDEX\(/ {
|
||||
@@ -235,13 +241,19 @@ comment_level > 0 { next; }
|
||||
# end any prior catalog data insertions before starting a define unique index
|
||||
# ----
|
||||
if (reln_open == 1) {
|
||||
# print "show";
|
||||
print "close " catalog;
|
||||
reln_open = 0;
|
||||
}
|
||||
|
||||
data = substr($0, 22, length($0) - 22);
|
||||
print "declare unique index " data
|
||||
pos = index(data, ",");
|
||||
iname = substr(data, 1, pos-1);
|
||||
data = substr(data, pos+1, length(data)-pos);
|
||||
pos = index(data, ",");
|
||||
ioid = substr(data, 1, pos-1);
|
||||
data = substr(data, pos+1, length(data)-pos);
|
||||
|
||||
print "declare unique index " iname " " ioid " " data
|
||||
}
|
||||
|
||||
/^BUILD_INDICES/ { print "build indices"; }
|
||||
@@ -254,7 +266,6 @@ comment_level > 0 { next; }
|
||||
# end any prior catalog data insertions before starting a new one..
|
||||
# ----
|
||||
if (reln_open == 1) {
|
||||
# print "show";
|
||||
print "close " catalog;
|
||||
reln_open = 0;
|
||||
}
|
||||
@@ -263,9 +274,12 @@ comment_level > 0 { next; }
|
||||
# get the name and properties of the new catalog
|
||||
# ----
|
||||
pos = index($1,")");
|
||||
catalog = substr($1,9,pos-9);
|
||||
catalogandoid = substr($1,9,pos-9);
|
||||
pos = index(catalogandoid, ",");
|
||||
catalog = substr(catalogandoid, 1, pos-1);
|
||||
catalogoid = substr(catalogandoid, pos+1, length(catalogandoid)-pos);
|
||||
|
||||
if ($0 ~ /BOOTSTRAP/) {
|
||||
if ($0 ~ /BKI_BOOTSTRAP/) {
|
||||
bootstrap = "bootstrap ";
|
||||
}
|
||||
if ($0 ~ /BKI_SHARED_RELATION/) {
|
||||
@@ -298,7 +312,7 @@ inside == 1 {
|
||||
# if this is the last line, then output the bki catalog stuff.
|
||||
# ----
|
||||
if ($1 ~ /}/) {
|
||||
print "create " bootstrap shared_relation without_oids catalog;
|
||||
print "create " bootstrap shared_relation without_oids catalog " " catalogoid;
|
||||
print "\t(";
|
||||
|
||||
for (j=1; j<i-1; j++) {
|
||||
@@ -338,7 +352,6 @@ inside == 1 {
|
||||
|
||||
END {
|
||||
if (reln_open == 1) {
|
||||
# print "show";
|
||||
print "close " catalog;
|
||||
reln_open = 0;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.282 2005/04/13 16:50:54 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.283 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@@ -190,23 +190,24 @@ SystemAttributeByName(const char *attname, bool relhasoids)
|
||||
/* ----------------------------------------------------------------
|
||||
* heap_create - Create an uncataloged heap relation
|
||||
*
|
||||
* relid is normally InvalidOid to specify that this routine should
|
||||
* generate an OID for the relation. During bootstrap, it can be
|
||||
* nonzero to specify a preselected OID.
|
||||
*
|
||||
* rel->rd_rel is initialized by RelationBuildLocalRelation,
|
||||
* and is mostly zeroes at return.
|
||||
*
|
||||
* Remove the system relation specific code to elsewhere eventually.
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
Relation
|
||||
heap_create(const char *relname,
|
||||
Oid relnamespace,
|
||||
Oid reltablespace,
|
||||
Oid relid,
|
||||
TupleDesc tupDesc,
|
||||
char relkind,
|
||||
bool shared_relation,
|
||||
bool allow_system_table_mods)
|
||||
{
|
||||
Oid relid;
|
||||
bool nailme = false;
|
||||
bool create_storage;
|
||||
Relation rel;
|
||||
|
||||
@@ -223,45 +224,9 @@ heap_create(const char *relname,
|
||||
errdetail("System catalog modifications are currently disallowed.")));
|
||||
|
||||
/*
|
||||
* Real ugly stuff to assign the proper relid in the relation
|
||||
* descriptor follows. Note that only "bootstrapped" relations whose
|
||||
* OIDs are hard-coded in pg_class.h should be listed here. We also
|
||||
* have to recognize those rels that must be nailed in cache.
|
||||
* Allocate an OID for the relation, unless we were told what to use.
|
||||
*/
|
||||
if (IsSystemNamespace(relnamespace))
|
||||
{
|
||||
if (strcmp(TypeRelationName, relname) == 0)
|
||||
{
|
||||
nailme = true;
|
||||
relid = RelOid_pg_type;
|
||||
}
|
||||
else if (strcmp(AttributeRelationName, relname) == 0)
|
||||
{
|
||||
nailme = true;
|
||||
relid = RelOid_pg_attribute;
|
||||
}
|
||||
else if (strcmp(ProcedureRelationName, relname) == 0)
|
||||
{
|
||||
nailme = true;
|
||||
relid = RelOid_pg_proc;
|
||||
}
|
||||
else if (strcmp(RelationRelationName, relname) == 0)
|
||||
{
|
||||
nailme = true;
|
||||
relid = RelOid_pg_class;
|
||||
}
|
||||
else if (strcmp(ShadowRelationName, relname) == 0)
|
||||
relid = RelOid_pg_shadow;
|
||||
else if (strcmp(GroupRelationName, relname) == 0)
|
||||
relid = RelOid_pg_group;
|
||||
else if (strcmp(DatabaseRelationName, relname) == 0)
|
||||
relid = RelOid_pg_database;
|
||||
else if (strcmp(TableSpaceRelationName, relname) == 0)
|
||||
relid = RelOid_pg_tablespace;
|
||||
else
|
||||
relid = newoid();
|
||||
}
|
||||
else
|
||||
if (!OidIsValid(relid))
|
||||
relid = newoid();
|
||||
|
||||
/*
|
||||
@@ -312,8 +277,7 @@ heap_create(const char *relname,
|
||||
tupDesc,
|
||||
relid,
|
||||
reltablespace,
|
||||
shared_relation,
|
||||
nailme);
|
||||
shared_relation);
|
||||
|
||||
/*
|
||||
* have the storage manager create the relation's disk file, if
|
||||
@@ -516,10 +480,10 @@ AddNewAttributeTuples(Oid new_rel_oid,
|
||||
|
||||
heap_freetuple(tup);
|
||||
|
||||
myself.classId = RelOid_pg_class;
|
||||
myself.classId = RelationRelationId;
|
||||
myself.objectId = new_rel_oid;
|
||||
myself.objectSubId = i + 1;
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = (*dpp)->atttypid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -706,6 +670,7 @@ Oid
|
||||
heap_create_with_catalog(const char *relname,
|
||||
Oid relnamespace,
|
||||
Oid reltablespace,
|
||||
Oid relid,
|
||||
TupleDesc tupdesc,
|
||||
char relkind,
|
||||
bool shared_relation,
|
||||
@@ -739,6 +704,7 @@ heap_create_with_catalog(const char *relname,
|
||||
new_rel_desc = heap_create(relname,
|
||||
relnamespace,
|
||||
reltablespace,
|
||||
relid,
|
||||
tupdesc,
|
||||
relkind,
|
||||
shared_relation,
|
||||
@@ -795,7 +761,7 @@ heap_create_with_catalog(const char *relname,
|
||||
ObjectAddress myself,
|
||||
referenced;
|
||||
|
||||
myself.classId = RelOid_pg_class;
|
||||
myself.classId = RelationRelationId;
|
||||
myself.objectId = new_rel_oid;
|
||||
myself.objectSubId = 0;
|
||||
referenced.classId = get_system_catalog_relid(NamespaceRelationName);
|
||||
@@ -1316,7 +1282,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, char *adbin)
|
||||
* Make a dependency so that the pg_attrdef entry goes away if the
|
||||
* column (or whole table) is deleted.
|
||||
*/
|
||||
colobject.classId = RelOid_pg_class;
|
||||
colobject.classId = RelationRelationId;
|
||||
colobject.objectId = RelationGetRelid(rel);
|
||||
colobject.objectSubId = attnum;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.250 2005/03/29 00:16:55 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.251 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@@ -443,12 +443,17 @@ UpdateIndexRelation(Oid indexoid,
|
||||
/* ----------------------------------------------------------------
|
||||
* index_create
|
||||
*
|
||||
* indexRelationId is normally InvalidOid to let this routine
|
||||
* generate an OID for the index. During bootstrap it may be
|
||||
* nonzero to specify a preselected OID.
|
||||
*
|
||||
* Returns OID of the created index.
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
Oid
|
||||
index_create(Oid heapRelationId,
|
||||
const char *indexRelationName,
|
||||
Oid indexRelationId,
|
||||
IndexInfo *indexInfo,
|
||||
Oid accessMethodObjectId,
|
||||
Oid tableSpaceId,
|
||||
@@ -526,6 +531,7 @@ index_create(Oid heapRelationId,
|
||||
indexRelation = heap_create(indexRelationName,
|
||||
namespaceId,
|
||||
tableSpaceId,
|
||||
indexRelationId,
|
||||
indexTupDesc,
|
||||
RELKIND_INDEX,
|
||||
shared_relation,
|
||||
@@ -600,7 +606,7 @@ index_create(Oid heapRelationId,
|
||||
ObjectAddress myself,
|
||||
referenced;
|
||||
|
||||
myself.classId = RelOid_pg_class;
|
||||
myself.classId = RelationRelationId;
|
||||
myself.objectId = indexoid;
|
||||
myself.objectSubId = 0;
|
||||
|
||||
@@ -656,7 +662,7 @@ index_create(Oid heapRelationId,
|
||||
{
|
||||
if (indexInfo->ii_KeyAttrNumbers[i] != 0)
|
||||
{
|
||||
referenced.classId = RelOid_pg_class;
|
||||
referenced.classId = RelationRelationId;
|
||||
referenced.objectId = heapRelationId;
|
||||
referenced.objectSubId = indexInfo->ii_KeyAttrNumbers[i];
|
||||
|
||||
@@ -1693,7 +1699,7 @@ reindex_relation(Oid relid, bool toast_too)
|
||||
* be created with an entry for its own pg_class row because we do
|
||||
* setNewRelfilenode() before we do index_build().
|
||||
*/
|
||||
is_pg_class = (RelationGetRelid(rel) == RelOid_pg_class);
|
||||
is_pg_class = (RelationGetRelid(rel) == RelationRelationId);
|
||||
doneIndexes = NIL;
|
||||
|
||||
/* Reindex all the indexes. */
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_aggregate.c,v 1.73 2005/04/12 04:26:17 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_aggregate.c,v 1.74 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -240,12 +240,12 @@ AggregateCreate(const char *aggName,
|
||||
* dependency on aggTransType since we depend on it indirectly through
|
||||
* transfn.
|
||||
*/
|
||||
myself.classId = RelOid_pg_proc;
|
||||
myself.classId = ProcedureRelationId;
|
||||
myself.objectId = procOid;
|
||||
myself.objectSubId = 0;
|
||||
|
||||
/* Depends on transition function */
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = transfn;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -253,7 +253,7 @@ AggregateCreate(const char *aggName,
|
||||
/* Depends on final function, if any */
|
||||
if (OidIsValid(finalfn))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = finalfn;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_constraint.c,v 1.23 2005/03/25 21:57:57 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_constraint.c,v 1.24 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -174,7 +174,7 @@ CreateConstraintEntry(const char *constraintName,
|
||||
*/
|
||||
ObjectAddress relobject;
|
||||
|
||||
relobject.classId = RelOid_pg_class;
|
||||
relobject.classId = RelationRelationId;
|
||||
relobject.objectId = relId;
|
||||
if (constraintNKeys > 0)
|
||||
{
|
||||
@@ -200,7 +200,7 @@ CreateConstraintEntry(const char *constraintName,
|
||||
*/
|
||||
ObjectAddress domobject;
|
||||
|
||||
domobject.classId = RelOid_pg_type;
|
||||
domobject.classId = TypeRelationId;
|
||||
domobject.objectId = domainId;
|
||||
domobject.objectSubId = 0;
|
||||
|
||||
@@ -215,7 +215,7 @@ CreateConstraintEntry(const char *constraintName,
|
||||
*/
|
||||
ObjectAddress relobject;
|
||||
|
||||
relobject.classId = RelOid_pg_class;
|
||||
relobject.classId = RelationRelationId;
|
||||
relobject.objectId = foreignRelId;
|
||||
if (foreignNKeys > 0)
|
||||
{
|
||||
@@ -242,7 +242,7 @@ CreateConstraintEntry(const char *constraintName,
|
||||
*/
|
||||
ObjectAddress relobject;
|
||||
|
||||
relobject.classId = RelOid_pg_class;
|
||||
relobject.classId = RelationRelationId;
|
||||
relobject.objectId = indexRelId;
|
||||
relobject.objectSubId = 0;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_conversion.c,v 1.20 2004/12/31 21:59:38 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_conversion.c,v 1.21 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -18,8 +18,8 @@
|
||||
#include "catalog/catname.h"
|
||||
#include "catalog/dependency.h"
|
||||
#include "catalog/indexing.h"
|
||||
#include "catalog/pg_class.h"
|
||||
#include "catalog/pg_conversion.h"
|
||||
#include "catalog/pg_proc.h"
|
||||
#include "catalog/namespace.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/lsyscache.h"
|
||||
@@ -116,7 +116,7 @@ ConversionCreate(const char *conname, Oid connamespace,
|
||||
myself.objectSubId = 0;
|
||||
|
||||
/* create dependency on conversion procedure */
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = conproc;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_operator.c,v 1.89 2005/03/29 03:01:30 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_operator.c,v 1.90 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* these routines moved here from commands/define.c and somewhat cleaned up.
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "catalog/indexing.h"
|
||||
#include "catalog/namespace.h"
|
||||
#include "catalog/pg_operator.h"
|
||||
#include "catalog/pg_proc.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "miscadmin.h"
|
||||
#include "parser/parse_func.h"
|
||||
@@ -901,7 +902,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid)
|
||||
/* Dependency on left type */
|
||||
if (OidIsValid(oper->oprleft))
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = oper->oprleft;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -910,7 +911,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid)
|
||||
/* Dependency on right type */
|
||||
if (OidIsValid(oper->oprright))
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = oper->oprright;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -919,7 +920,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid)
|
||||
/* Dependency on result type */
|
||||
if (OidIsValid(oper->oprresult))
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = oper->oprresult;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -938,7 +939,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid)
|
||||
/* Dependency on implementation function */
|
||||
if (OidIsValid(oper->oprcode))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = oper->oprcode;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -947,7 +948,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid)
|
||||
/* Dependency on restriction selectivity function */
|
||||
if (OidIsValid(oper->oprrest))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = oper->oprrest;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -956,7 +957,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid)
|
||||
/* Dependency on join selectivity function */
|
||||
if (OidIsValid(oper->oprjoin))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = oper->oprjoin;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_proc.c,v 1.126 2005/03/31 22:46:06 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_proc.c,v 1.127 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -329,9 +329,9 @@ ProcedureCreate(const char *procedureName,
|
||||
* existing function, first delete any existing pg_depend entries.
|
||||
*/
|
||||
if (is_update)
|
||||
deleteDependencyRecordsFor(RelOid_pg_proc, retval);
|
||||
deleteDependencyRecordsFor(ProcedureRelationId, retval);
|
||||
|
||||
myself.classId = RelOid_pg_proc;
|
||||
myself.classId = ProcedureRelationId;
|
||||
myself.objectId = retval;
|
||||
myself.objectSubId = 0;
|
||||
|
||||
@@ -348,7 +348,7 @@ ProcedureCreate(const char *procedureName,
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
/* dependency on return type */
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = returnType;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -356,7 +356,7 @@ ProcedureCreate(const char *procedureName,
|
||||
/* dependency on parameter types */
|
||||
for (i = 0; i < allParamCount; i++)
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = allParams[i];
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.98 2005/01/27 23:23:51 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.99 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "catalog/catname.h"
|
||||
#include "catalog/dependency.h"
|
||||
#include "catalog/indexing.h"
|
||||
#include "catalog/pg_proc.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "miscadmin.h"
|
||||
#include "utils/builtins.h"
|
||||
@@ -378,10 +379,9 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
referenced;
|
||||
|
||||
if (rebuild)
|
||||
deleteDependencyRecordsFor(RelOid_pg_type,
|
||||
typeObjectId);
|
||||
deleteDependencyRecordsFor(TypeRelationId, typeObjectId);
|
||||
|
||||
myself.classId = RelOid_pg_type;
|
||||
myself.classId = TypeRelationId;
|
||||
myself.objectId = typeObjectId;
|
||||
myself.objectSubId = 0;
|
||||
|
||||
@@ -398,7 +398,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
/* Normal dependencies on the I/O functions */
|
||||
if (OidIsValid(inputProcedure))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = inputProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -406,7 +406,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
|
||||
if (OidIsValid(outputProcedure))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = outputProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -414,7 +414,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
|
||||
if (OidIsValid(receiveProcedure))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = receiveProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -422,7 +422,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
|
||||
if (OidIsValid(sendProcedure))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = sendProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -430,7 +430,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
|
||||
if (OidIsValid(analyzeProcedure))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = analyzeProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -448,7 +448,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
*/
|
||||
if (OidIsValid(relationOid))
|
||||
{
|
||||
referenced.classId = RelOid_pg_class;
|
||||
referenced.classId = RelationRelationId;
|
||||
referenced.objectId = relationOid;
|
||||
referenced.objectSubId = 0;
|
||||
|
||||
@@ -467,7 +467,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
*/
|
||||
if (OidIsValid(elementType))
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = elementType;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_AUTO);
|
||||
@@ -476,7 +476,7 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
/* Normal dependency from a domain to its base type. */
|
||||
if (OidIsValid(baseType))
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = baseType;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/aggregatecmds.c,v 1.24 2005/04/12 04:26:20 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/aggregatecmds.c,v 1.25 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The "DefineFoo" routines take the parse tree and pick out the
|
||||
@@ -206,7 +206,7 @@ RemoveAggregate(RemoveAggrStmt *stmt)
|
||||
/*
|
||||
* Do the deletion
|
||||
*/
|
||||
object.classId = RelOid_pg_proc;
|
||||
object.classId = ProcedureRelationId;
|
||||
object.objectId = procOid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.134 2005/03/29 00:16:57 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.135 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -527,7 +527,7 @@ rebuild_relation(Relation OldHeap, Oid indexOid)
|
||||
CommandCounterIncrement();
|
||||
|
||||
/* Destroy new heap with old filenode */
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = OIDNewHeap;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -570,6 +570,7 @@ make_new_heap(Oid OIDOldHeap, const char *NewName, Oid NewTableSpace)
|
||||
OIDNewHeap = heap_create_with_catalog(NewName,
|
||||
RelationGetNamespace(OldHeap),
|
||||
NewTableSpace,
|
||||
InvalidOid,
|
||||
tupdesc,
|
||||
OldHeap->rd_rel->relkind,
|
||||
OldHeap->rd_rel->relisshared,
|
||||
@@ -799,7 +800,7 @@ swap_relation_files(Oid r1, Oid r2)
|
||||
/* Delete old dependencies */
|
||||
if (relform1->reltoastrelid)
|
||||
{
|
||||
count = deleteDependencyRecordsFor(RelOid_pg_class,
|
||||
count = deleteDependencyRecordsFor(RelationRelationId,
|
||||
relform1->reltoastrelid);
|
||||
if (count != 1)
|
||||
elog(ERROR, "expected one dependency record for TOAST table, found %ld",
|
||||
@@ -807,7 +808,7 @@ swap_relation_files(Oid r1, Oid r2)
|
||||
}
|
||||
if (relform2->reltoastrelid)
|
||||
{
|
||||
count = deleteDependencyRecordsFor(RelOid_pg_class,
|
||||
count = deleteDependencyRecordsFor(RelationRelationId,
|
||||
relform2->reltoastrelid);
|
||||
if (count != 1)
|
||||
elog(ERROR, "expected one dependency record for TOAST table, found %ld",
|
||||
@@ -815,9 +816,9 @@ swap_relation_files(Oid r1, Oid r2)
|
||||
}
|
||||
|
||||
/* Register new dependencies */
|
||||
baseobject.classId = RelOid_pg_class;
|
||||
baseobject.classId = RelationRelationId;
|
||||
baseobject.objectSubId = 0;
|
||||
toastobject.classId = RelOid_pg_class;
|
||||
toastobject.classId = RelationRelationId;
|
||||
toastobject.objectSubId = 0;
|
||||
|
||||
if (relform1->reltoastrelid)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/comment.c,v 1.81 2005/01/27 23:23:54 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/comment.c,v 1.82 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -20,9 +20,11 @@
|
||||
#include "catalog/indexing.h"
|
||||
#include "catalog/namespace.h"
|
||||
#include "catalog/pg_constraint.h"
|
||||
#include "catalog/pg_database.h"
|
||||
#include "catalog/pg_description.h"
|
||||
#include "catalog/pg_largeobject.h"
|
||||
#include "catalog/pg_operator.h"
|
||||
#include "catalog/pg_proc.h"
|
||||
#include "catalog/pg_rewrite.h"
|
||||
#include "catalog/pg_trigger.h"
|
||||
#include "catalog/pg_type.h"
|
||||
@@ -352,7 +354,7 @@ CommentRelation(int objtype, List *relname, char *comment)
|
||||
|
||||
/* Create the comment using the relation's oid */
|
||||
|
||||
CreateComments(RelationGetRelid(relation), RelOid_pg_class, 0, comment);
|
||||
CreateComments(RelationGetRelid(relation), RelationRelationId, 0, comment);
|
||||
|
||||
/* Done, but hold lock until commit */
|
||||
relation_close(relation, NoLock);
|
||||
@@ -406,7 +408,7 @@ CommentAttribute(List *qualname, char *comment)
|
||||
|
||||
/* Create the comment using the relation's oid */
|
||||
|
||||
CreateComments(RelationGetRelid(relation), RelOid_pg_class,
|
||||
CreateComments(RelationGetRelid(relation), RelationRelationId,
|
||||
(int32) attnum, comment);
|
||||
|
||||
/* Done, but hold lock until commit */
|
||||
@@ -475,7 +477,7 @@ CommentDatabase(List *qualname, char *comment)
|
||||
database);
|
||||
|
||||
/* Create the comment with the pg_database oid */
|
||||
CreateComments(oid, RelOid_pg_database, 0, comment);
|
||||
CreateComments(oid, DatabaseRelationId, 0, comment);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -670,7 +672,7 @@ CommentType(List *typename, char *comment)
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
|
||||
CreateComments(oid, RelOid_pg_type, 0, comment);
|
||||
CreateComments(oid, TypeRelationId, 0, comment);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -706,7 +708,7 @@ CommentAggregate(List *aggregate, List *arguments, char *comment)
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
|
||||
CreateComments(oid, RelOid_pg_proc, 0, comment);
|
||||
CreateComments(oid, ProcedureRelationId, 0, comment);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -735,7 +737,7 @@ CommentProc(List *function, List *arguments, char *comment)
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
|
||||
CreateComments(oid, RelOid_pg_proc, 0, comment);
|
||||
CreateComments(oid, ProcedureRelationId, 0, comment);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.59 2005/03/31 22:46:07 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.60 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* These routines take the parse tree and pick out the
|
||||
@@ -719,7 +719,7 @@ RemoveFunction(RemoveFuncStmt *stmt)
|
||||
/*
|
||||
* Do the deletion
|
||||
*/
|
||||
object.classId = RelOid_pg_proc;
|
||||
object.classId = ProcedureRelationId;
|
||||
object.objectId = funcOid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -1304,13 +1304,13 @@ CreateCast(CreateCastStmt *stmt)
|
||||
myself.objectSubId = 0;
|
||||
|
||||
/* dependency on source type */
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = sourcetypeid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
/* dependency on target type */
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = targettypeid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -1318,7 +1318,7 @@ CreateCast(CreateCastStmt *stmt)
|
||||
/* dependency on function */
|
||||
if (OidIsValid(funcid))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = funcid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.128 2004/12/31 21:59:41 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.129 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -65,6 +65,8 @@ static bool relationHasPrimaryKey(Relation rel);
|
||||
* 'heapRelation': the relation the index will apply to.
|
||||
* 'indexRelationName': the name for the new index, or NULL to indicate
|
||||
* that a nonconflicting default name should be picked.
|
||||
* 'indexRelationId': normally InvalidOid, but during bootstrap can be
|
||||
* nonzero to specify a preselected OID for the index.
|
||||
* 'accessMethodName': name of the AM to use.
|
||||
* 'tableSpaceName': name of the tablespace to create the index in.
|
||||
* NULL specifies using the appropriate default.
|
||||
@@ -86,6 +88,7 @@ static bool relationHasPrimaryKey(Relation rel);
|
||||
void
|
||||
DefineIndex(RangeVar *heapRelation,
|
||||
char *indexRelationName,
|
||||
Oid indexRelationId,
|
||||
char *accessMethodName,
|
||||
char *tableSpaceName,
|
||||
List *attributeList,
|
||||
@@ -379,7 +382,7 @@ DefineIndex(RangeVar *heapRelation,
|
||||
primary ? "PRIMARY KEY" : "UNIQUE",
|
||||
indexRelationName, RelationGetRelationName(rel))));
|
||||
|
||||
index_create(relationId, indexRelationName,
|
||||
index_create(relationId, indexRelationName, indexRelationId,
|
||||
indexInfo, accessMethodId, tablespaceId, classObjectId,
|
||||
primary, isconstraint,
|
||||
allowSystemTableMods, skip_build);
|
||||
@@ -887,7 +890,7 @@ RemoveIndex(RangeVar *relation, DropBehavior behavior)
|
||||
errmsg("\"%s\" is not an index",
|
||||
relation->relname)));
|
||||
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = indOid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -1027,7 +1030,7 @@ ReindexDatabase(const char *dbname, bool force /* currently unused */ ,
|
||||
* reindexing itself will try to update pg_class.
|
||||
*/
|
||||
old = MemoryContextSwitchTo(private_context);
|
||||
relids = lappend_oid(relids, RelOid_pg_class);
|
||||
relids = lappend_oid(relids, RelationRelationId);
|
||||
MemoryContextSwitchTo(old);
|
||||
|
||||
/*
|
||||
@@ -1057,7 +1060,7 @@ ReindexDatabase(const char *dbname, bool force /* currently unused */ ,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (HeapTupleGetOid(tuple) == RelOid_pg_class)
|
||||
if (HeapTupleGetOid(tuple) == RelationRelationId)
|
||||
continue; /* got it already */
|
||||
|
||||
old = MemoryContextSwitchTo(private_context);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.30 2005/03/29 00:16:57 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.31 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -356,7 +356,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
/* dependency on indexed datatype */
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = typeoid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -364,7 +364,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
/* dependency on storage datatype */
|
||||
if (OidIsValid(storageoid))
|
||||
{
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = storageoid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -386,7 +386,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
{
|
||||
OpClassMember *proc = (OpClassMember *) lfirst(l);
|
||||
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = proc->object;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/proclang.c,v 1.58 2005/03/29 03:01:30 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/proclang.c,v 1.59 2005/04/14 01:38:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -149,7 +149,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
|
||||
myself.objectSubId = 0;
|
||||
|
||||
/* dependency on the PL handler function */
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = procOid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -157,7 +157,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
|
||||
/* dependency on the validator function, if any */
|
||||
if (OidIsValid(valProcOid))
|
||||
{
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = valProcOid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.153 2005/04/13 16:50:54 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.154 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -424,6 +424,7 @@ DefineRelation(CreateStmt *stmt, char relkind)
|
||||
relationId = heap_create_with_catalog(relname,
|
||||
namespaceId,
|
||||
tablespaceId,
|
||||
InvalidOid,
|
||||
descriptor,
|
||||
relkind,
|
||||
false,
|
||||
@@ -517,7 +518,7 @@ RemoveRelation(const RangeVar *relation, DropBehavior behavior)
|
||||
|
||||
relOid = RangeVarGetRelid(relation, false);
|
||||
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = relOid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -1163,10 +1164,10 @@ StoreCatalogInheritance(Oid relationId, List *supers)
|
||||
/*
|
||||
* Store a dependency too
|
||||
*/
|
||||
parentobject.classId = RelOid_pg_class;
|
||||
parentobject.classId = RelationRelationId;
|
||||
parentobject.objectId = parentOid;
|
||||
parentobject.objectSubId = 0;
|
||||
childobject.classId = RelOid_pg_class;
|
||||
childobject.classId = RelationRelationId;
|
||||
childobject.objectId = relationId;
|
||||
childobject.objectSubId = 0;
|
||||
|
||||
@@ -2293,7 +2294,7 @@ ATRewriteTables(List **wqueue)
|
||||
CommandCounterIncrement();
|
||||
|
||||
/* Destroy new heap with old filenode */
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = OIDNewHeap;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -2776,7 +2777,7 @@ find_composite_type_dependencies(Oid typeOid, const char *origTblName)
|
||||
ScanKeyInit(&key[0],
|
||||
Anum_pg_depend_refclassid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelOid_pg_type));
|
||||
ObjectIdGetDatum(TypeRelationId));
|
||||
ScanKeyInit(&key[1],
|
||||
Anum_pg_depend_refobjid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
@@ -2793,7 +2794,7 @@ find_composite_type_dependencies(Oid typeOid, const char *origTblName)
|
||||
|
||||
/* Ignore dependees that aren't user columns of relations */
|
||||
/* (we assume system columns are never of rowtypes) */
|
||||
if (pg_depend->classid != RelOid_pg_class ||
|
||||
if (pg_depend->classid != RelationRelationId ||
|
||||
pg_depend->objsubid <= 0)
|
||||
continue;
|
||||
|
||||
@@ -3112,10 +3113,10 @@ add_column_datatype_dependency(Oid relid, int32 attnum, Oid typid)
|
||||
ObjectAddress myself,
|
||||
referenced;
|
||||
|
||||
myself.classId = RelOid_pg_class;
|
||||
myself.classId = RelationRelationId;
|
||||
myself.objectId = relid;
|
||||
myself.objectSubId = attnum;
|
||||
referenced.classId = RelOid_pg_type;
|
||||
referenced.classId = TypeRelationId;
|
||||
referenced.objectId = typid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
@@ -3130,10 +3131,10 @@ add_column_support_dependency(Oid relid, int32 attnum, RangeVar *support)
|
||||
ObjectAddress colobject,
|
||||
suppobject;
|
||||
|
||||
colobject.classId = RelOid_pg_class;
|
||||
colobject.classId = RelationRelationId;
|
||||
colobject.objectId = relid;
|
||||
colobject.objectSubId = attnum;
|
||||
suppobject.classId = RelOid_pg_class;
|
||||
suppobject.classId = RelationRelationId;
|
||||
suppobject.objectId = RangeVarGetRelid(support, false);
|
||||
suppobject.objectSubId = 0;
|
||||
recordDependencyOn(&suppobject, &colobject, DEPENDENCY_INTERNAL);
|
||||
@@ -3637,7 +3638,7 @@ ATExecDropColumn(Relation rel, const char *colName,
|
||||
/*
|
||||
* Perform the actual column deletion
|
||||
*/
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = RelationGetRelid(rel);
|
||||
object.objectSubId = attnum;
|
||||
|
||||
@@ -3697,6 +3698,7 @@ ATExecAddIndex(AlteredTableInfo *tab, Relation rel,
|
||||
|
||||
DefineIndex(stmt->relation, /* relation */
|
||||
stmt->idxname, /* index name */
|
||||
InvalidOid, /* no predefined OID */
|
||||
stmt->accessMethod, /* am name */
|
||||
stmt->tableSpace,
|
||||
stmt->indexParams, /* parameters */
|
||||
@@ -4894,7 +4896,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
ScanKeyInit(&key[0],
|
||||
Anum_pg_depend_refclassid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelOid_pg_class));
|
||||
ObjectIdGetDatum(RelationRelationId));
|
||||
ScanKeyInit(&key[1],
|
||||
Anum_pg_depend_refobjid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
@@ -5018,7 +5020,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
ScanKeyInit(&key[0],
|
||||
Anum_pg_depend_classid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelOid_pg_class));
|
||||
ObjectIdGetDatum(RelationRelationId));
|
||||
ScanKeyInit(&key[1],
|
||||
Anum_pg_depend_objid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
@@ -5038,7 +5040,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
if (foundDep->deptype != DEPENDENCY_NORMAL)
|
||||
elog(ERROR, "found unexpected dependency type '%c'",
|
||||
foundDep->deptype);
|
||||
if (foundDep->refclassid != RelOid_pg_type ||
|
||||
if (foundDep->refclassid != TypeRelationId ||
|
||||
foundDep->refobjid != attTup->atttypid)
|
||||
elog(ERROR, "found unexpected dependency for column");
|
||||
|
||||
@@ -5143,7 +5145,7 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab)
|
||||
performDeletion(&obj, DROP_RESTRICT);
|
||||
}
|
||||
|
||||
obj.classId = RelOid_pg_class;
|
||||
obj.classId = RelationRelationId;
|
||||
foreach(l, tab->changedIndexOids)
|
||||
{
|
||||
obj.objectId = lfirst_oid(l);
|
||||
@@ -5399,7 +5401,7 @@ change_owner_recurse_to_sequences(Oid relationOid, int32 newOwnerSysId)
|
||||
ScanKeyInit(&key[0],
|
||||
Anum_pg_depend_refclassid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelOid_pg_class));
|
||||
ObjectIdGetDatum(RelationRelationId));
|
||||
ScanKeyInit(&key[1],
|
||||
Anum_pg_depend_refobjid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
@@ -5416,7 +5418,7 @@ change_owner_recurse_to_sequences(Oid relationOid, int32 newOwnerSysId)
|
||||
|
||||
/* skip dependencies other than internal dependencies on columns */
|
||||
if (depForm->refobjsubid == 0 ||
|
||||
depForm->classid != RelOid_pg_class ||
|
||||
depForm->classid != RelationRelationId ||
|
||||
depForm->objsubid != 0 ||
|
||||
depForm->deptype != DEPENDENCY_INTERNAL)
|
||||
continue;
|
||||
@@ -5853,6 +5855,7 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
|
||||
toast_relid = heap_create_with_catalog(toast_relname,
|
||||
PG_TOAST_NAMESPACE,
|
||||
rel->rd_rel->reltablespace,
|
||||
InvalidOid,
|
||||
tupdesc,
|
||||
RELKIND_TOASTVALUE,
|
||||
shared_relation,
|
||||
@@ -5889,7 +5892,8 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
|
||||
classObjectId[0] = OID_BTREE_OPS_OID;
|
||||
classObjectId[1] = INT4_BTREE_OPS_OID;
|
||||
|
||||
toast_idxid = index_create(toast_relid, toast_idxname, indexInfo,
|
||||
toast_idxid = index_create(toast_relid, toast_idxname, InvalidOid,
|
||||
indexInfo,
|
||||
BTREE_AM_OID,
|
||||
rel->rd_rel->reltablespace,
|
||||
classObjectId,
|
||||
@@ -5928,10 +5932,10 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
|
||||
* Register dependency from the toast table to the master, so that the
|
||||
* toast table will be deleted if the master is.
|
||||
*/
|
||||
baseobject.classId = RelOid_pg_class;
|
||||
baseobject.classId = RelationRelationId;
|
||||
baseobject.objectId = relOid;
|
||||
baseobject.objectSubId = 0;
|
||||
toastobject.classId = RelOid_pg_class;
|
||||
toastobject.classId = RelationRelationId;
|
||||
toastobject.objectId = toast_relid;
|
||||
toastobject.objectSubId = 0;
|
||||
|
||||
@@ -6091,7 +6095,7 @@ PreCommit_on_commit_actions(void)
|
||||
{
|
||||
ObjectAddress object;
|
||||
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = oc->relid;
|
||||
object.objectSubId = 0;
|
||||
performDeletion(&object, DROP_CASCADE);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.184 2005/04/11 19:51:15 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.185 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -422,20 +422,20 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
|
||||
* dependency on the constraint will indirectly depend on the
|
||||
* relations.
|
||||
*/
|
||||
referenced.classId = RelOid_pg_proc;
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = funcoid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
|
||||
if (!forConstraint)
|
||||
{
|
||||
referenced.classId = RelOid_pg_class;
|
||||
referenced.classId = RelationRelationId;
|
||||
referenced.objectId = RelationGetRelid(rel);
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_AUTO);
|
||||
if (constrrelid != InvalidOid)
|
||||
{
|
||||
referenced.classId = RelOid_pg_class;
|
||||
referenced.classId = RelationRelationId;
|
||||
referenced.objectId = constrrelid;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_AUTO);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/typecmds.c,v 1.68 2005/03/29 03:01:30 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/typecmds.c,v 1.69 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The "DefineFoo" routines take the parse tree and pick out the
|
||||
@@ -441,7 +441,7 @@ RemoveType(List *names, DropBehavior behavior)
|
||||
/*
|
||||
* Do the deletion
|
||||
*/
|
||||
object.classId = RelOid_pg_type;
|
||||
object.classId = TypeRelationId;
|
||||
object.objectId = typeoid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -836,7 +836,7 @@ RemoveDomain(List *names, DropBehavior behavior)
|
||||
/*
|
||||
* Do the deletion
|
||||
*/
|
||||
object.classId = RelOid_pg_type;
|
||||
object.classId = TypeRelationId;
|
||||
object.objectId = typeoid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
@@ -1655,7 +1655,7 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode)
|
||||
ScanKeyInit(&key[0],
|
||||
Anum_pg_depend_refclassid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelOid_pg_type));
|
||||
ObjectIdGetDatum(TypeRelationId));
|
||||
ScanKeyInit(&key[1],
|
||||
Anum_pg_depend_refobjid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
@@ -1674,7 +1674,7 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode)
|
||||
|
||||
/* Ignore dependees that aren't user columns of relations */
|
||||
/* (we assume system columns are never of domain types) */
|
||||
if (pg_depend->classid != RelOid_pg_class ||
|
||||
if (pg_depend->classid != RelationRelationId ||
|
||||
pg_depend->objsubid <= 0)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.149 2005/02/20 02:21:34 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.150 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -813,10 +813,10 @@ CheckPgUserAclNotNull(void)
|
||||
HeapTuple htup;
|
||||
|
||||
htup = SearchSysCache(RELOID,
|
||||
ObjectIdGetDatum(RelOid_pg_shadow),
|
||||
ObjectIdGetDatum(ShadowRelationId),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(htup)) /* should not happen, we hope */
|
||||
elog(ERROR, "cache lookup failed for relation %u", RelOid_pg_shadow);
|
||||
elog(ERROR, "cache lookup failed for relation %u", ShadowRelationId);
|
||||
|
||||
if (heap_attisnull(htup, Anum_pg_class_relacl))
|
||||
ereport(ERROR,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.89 2005/04/13 16:50:54 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.90 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -448,7 +448,7 @@ RemoveView(const RangeVar *view, DropBehavior behavior)
|
||||
|
||||
viewOid = RangeVarGetRelid(view, false);
|
||||
|
||||
object.classId = RelOid_pg_class;
|
||||
object.classId = RelationRelationId;
|
||||
object.objectId = viewOid;
|
||||
object.objectSubId = 0;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.245 2005/04/06 16:34:04 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.246 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -759,6 +759,7 @@ InitPlan(QueryDesc *queryDesc, bool explainOnly)
|
||||
intoRelationId = heap_create_with_catalog(intoName,
|
||||
namespaceId,
|
||||
InvalidOid,
|
||||
InvalidOid,
|
||||
tupdesc,
|
||||
RELKIND_RELATION,
|
||||
false,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/rewrite/rewriteDefine.c,v 1.102 2005/04/06 16:34:06 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/rewrite/rewriteDefine.c,v 1.103 2005/04/14 01:38:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -148,11 +148,11 @@ InsertRule(char *rulname,
|
||||
* implicit --- this prevents deleting a view's SELECT rule. Other
|
||||
* kinds of rules can be AUTO.
|
||||
*/
|
||||
myself.classId = RelationGetRelid(pg_rewrite_desc);
|
||||
myself.classId = RewriteRelationId;
|
||||
myself.objectId = rewriteObjectId;
|
||||
myself.objectSubId = 0;
|
||||
|
||||
referenced.classId = RelOid_pg_class;
|
||||
referenced.classId = RelationRelationId;
|
||||
referenced.objectId = eventrel_oid;
|
||||
referenced.objectSubId = 0;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.234 2005/03/14 00:19:36 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.235 2005/04/14 01:38:18 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -724,6 +724,7 @@ ProcessUtility(Node *parsetree,
|
||||
|
||||
DefineIndex(stmt->relation, /* relation */
|
||||
stmt->idxname, /* index name */
|
||||
InvalidOid, /* no predefined OID */
|
||||
stmt->accessMethod, /* am name */
|
||||
stmt->tableSpace,
|
||||
stmt->indexParams, /* parameters */
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* back to source text
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.191 2005/04/07 01:51:39 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.192 2005/04/14 01:38:19 tgl Exp $
|
||||
*
|
||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||
*
|
||||
@@ -1274,7 +1274,7 @@ pg_get_serial_sequence(PG_FUNCTION_ARGS)
|
||||
ScanKeyInit(&key[0],
|
||||
Anum_pg_depend_refclassid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelOid_pg_class));
|
||||
ObjectIdGetDatum(RelationRelationId));
|
||||
ScanKeyInit(&key[1],
|
||||
Anum_pg_depend_refobjid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
@@ -1295,7 +1295,7 @@ pg_get_serial_sequence(PG_FUNCTION_ARGS)
|
||||
* We assume any internal dependency of a relation on a column
|
||||
* must be what we are looking for.
|
||||
*/
|
||||
if (deprec->classid == RelOid_pg_class &&
|
||||
if (deprec->classid == RelationRelationId &&
|
||||
deprec->objsubid == 0 &&
|
||||
deprec->deptype == DEPENDENCY_INTERNAL)
|
||||
{
|
||||
|
||||
6
src/backend/utils/cache/inval.c
vendored
6
src/backend/utils/cache/inval.c
vendored
@@ -80,7 +80,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/cache/inval.c,v 1.70 2005/01/10 21:57:17 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/cache/inval.c,v 1.71 2005/04/14 01:38:19 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -541,7 +541,7 @@ PrepareForTupleInvalidation(Relation relation, HeapTuple tuple)
|
||||
*/
|
||||
tupleRelId = RelationGetRelid(relation);
|
||||
|
||||
if (tupleRelId == RelOid_pg_class)
|
||||
if (tupleRelId == RelationRelationId)
|
||||
{
|
||||
Form_pg_class classtup = (Form_pg_class) GETSTRUCT(tuple);
|
||||
RelFileNode rnode;
|
||||
@@ -575,7 +575,7 @@ PrepareForTupleInvalidation(Relation relation, HeapTuple tuple)
|
||||
rnode.relNode = classtup->relfilenode;
|
||||
RegisterSmgrInvalidation(rnode);
|
||||
}
|
||||
else if (tupleRelId == RelOid_pg_attribute)
|
||||
else if (tupleRelId == AttributeRelationId)
|
||||
{
|
||||
Form_pg_attribute atttup = (Form_pg_attribute) GETSTRUCT(tuple);
|
||||
|
||||
|
||||
35
src/backend/utils/cache/relcache.c
vendored
35
src/backend/utils/cache/relcache.c
vendored
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.218 2005/03/29 00:17:11 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.219 2005/04/14 01:38:19 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -2150,17 +2150,35 @@ RelationBuildLocalRelation(const char *relname,
|
||||
TupleDesc tupDesc,
|
||||
Oid relid,
|
||||
Oid reltablespace,
|
||||
bool shared_relation,
|
||||
bool nailit)
|
||||
bool shared_relation)
|
||||
{
|
||||
Relation rel;
|
||||
MemoryContext oldcxt;
|
||||
int natts = tupDesc->natts;
|
||||
int i;
|
||||
bool has_not_null;
|
||||
bool nailit;
|
||||
|
||||
AssertArg(natts >= 0);
|
||||
|
||||
/*
|
||||
* check for creation of a rel that must be nailed in cache.
|
||||
*
|
||||
* XXX this list had better match RelationCacheInitialize's list.
|
||||
*/
|
||||
switch (relid)
|
||||
{
|
||||
case RelationRelationId:
|
||||
case AttributeRelationId:
|
||||
case ProcedureRelationId:
|
||||
case TypeRelationId:
|
||||
nailit = true;
|
||||
break;
|
||||
default:
|
||||
nailit = false;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* switch to the cache context to create the relcache entry.
|
||||
*/
|
||||
@@ -2179,6 +2197,9 @@ RelationBuildLocalRelation(const char *relname,
|
||||
/* make sure relation is marked as having no open file yet */
|
||||
rel->rd_smgr = NULL;
|
||||
|
||||
/* mark it nailed if appropriate */
|
||||
rel->rd_isnailed = nailit;
|
||||
|
||||
rel->rd_refcnt = nailit ? 1 : 0;
|
||||
|
||||
/* it's being created in this transaction */
|
||||
@@ -2190,14 +2211,6 @@ RelationBuildLocalRelation(const char *relname,
|
||||
/* is it a temporary relation? */
|
||||
rel->rd_istemp = isTempNamespace(relnamespace);
|
||||
|
||||
/*
|
||||
* nail the reldesc if this is a bootstrap create reln and we may need
|
||||
* it in the cache later on in the bootstrap process so we don't ever
|
||||
* want it kicked out. e.g. pg_attribute!!!
|
||||
*/
|
||||
if (nailit)
|
||||
rel->rd_isnailed = true;
|
||||
|
||||
/*
|
||||
* create a new tuple descriptor from the one passed in. We do this
|
||||
* partly to copy it into the cache context, and partly because the
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.4 2005/02/26 18:43:33 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.5 2005/04/14 01:38:20 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -643,7 +643,7 @@ BuildFlatFiles(bool database_only)
|
||||
/* hard-wired path to pg_database */
|
||||
rnode.spcNode = GLOBALTABLESPACE_OID;
|
||||
rnode.dbNode = 0;
|
||||
rnode.relNode = RelOid_pg_database;
|
||||
rnode.relNode = DatabaseRelationId;
|
||||
|
||||
/* No locking is needed because no one else is alive yet */
|
||||
rel = XLogOpenRelation(true, 0, rnode);
|
||||
@@ -654,7 +654,7 @@ BuildFlatFiles(bool database_only)
|
||||
/* hard-wired path to pg_group */
|
||||
rnode.spcNode = GLOBALTABLESPACE_OID;
|
||||
rnode.dbNode = 0;
|
||||
rnode.relNode = RelOid_pg_group;
|
||||
rnode.relNode = GroupRelationId;
|
||||
|
||||
rel = XLogOpenRelation(true, 0, rnode);
|
||||
write_group_file(rel);
|
||||
@@ -662,7 +662,7 @@ BuildFlatFiles(bool database_only)
|
||||
/* hard-wired path to pg_shadow */
|
||||
rnode.spcNode = GLOBALTABLESPACE_OID;
|
||||
rnode.dbNode = 0;
|
||||
rnode.relNode = RelOid_pg_shadow;
|
||||
rnode.relNode = ShadowRelationId;
|
||||
|
||||
rel = XLogOpenRelation(true, 0, rnode);
|
||||
write_user_file(rel);
|
||||
@@ -816,13 +816,13 @@ flatfile_update_trigger(PG_FUNCTION_ARGS)
|
||||
|
||||
switch (RelationGetRelid(trigdata->tg_relation))
|
||||
{
|
||||
case RelOid_pg_database:
|
||||
case DatabaseRelationId:
|
||||
database_file_update_needed();
|
||||
break;
|
||||
case RelOid_pg_group:
|
||||
case GroupRelationId:
|
||||
group_file_update_needed();
|
||||
break;
|
||||
case RelOid_pg_shadow:
|
||||
case ShadowRelationId:
|
||||
user_file_update_needed();
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user