mirror of
https://github.com/postgres/postgres.git
synced 2025-11-12 05:01:15 +03:00
Support toasting of shared system relations, and provide toast tables for
pg_database, pg_shadow, pg_group, all of which now have potentially-long fields. Along the way, get rid of SharedSystemRelationNames list: shared rels are now identified in their include/pg_catalog/*.h files by a BKI_SHARED_RELATION macro, while indexes and toast rels inherit sharedness automatically from their parent table. Fix some bugs with failure to detoast pg_group.grolist during ALTER GROUP.
This commit is contained in:
23
src/backend/utils/cache/relcache.c
vendored
23
src/backend/utils/cache/relcache.c
vendored
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.162 2002/04/19 16:36:08 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.163 2002/04/27 21:24:34 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1319,7 +1319,10 @@ LookupOpclassInfo(Oid operatorClassOid,
|
||||
* The relation descriptor is built just from the supplied parameters,
|
||||
* without actually looking at any system table entries. We cheat
|
||||
* quite a lot since we only need to work for a few basic system
|
||||
* catalogs...
|
||||
* catalogs.
|
||||
*
|
||||
* formrdesc is currently used for: pg_class, pg_attribute, pg_proc,
|
||||
* and pg_type (see RelationCacheInitialize).
|
||||
*
|
||||
* Note that these catalogs can't have constraints, default values,
|
||||
* rules, or triggers, since we don't cope with any of that.
|
||||
@@ -1374,9 +1377,10 @@ formrdesc(const char *relationName,
|
||||
/*
|
||||
* It's important to distinguish between shared and non-shared
|
||||
* relations, even at bootstrap time, to make sure we know where they
|
||||
* are stored.
|
||||
* are stored. At present, all relations that formrdesc is used for
|
||||
* are not shared.
|
||||
*/
|
||||
relation->rd_rel->relisshared = IsSharedSystemRelationName(relationName);
|
||||
relation->rd_rel->relisshared = false;
|
||||
|
||||
relation->rd_rel->relpages = 1;
|
||||
relation->rd_rel->reltuples = 1;
|
||||
@@ -1434,15 +1438,8 @@ formrdesc(const char *relationName,
|
||||
/* In bootstrap mode, we have no indexes */
|
||||
if (!IsBootstrapProcessingMode())
|
||||
{
|
||||
/*
|
||||
* This list is incomplete, but it only has to work for the set of
|
||||
* rels that formrdesc is used for ...
|
||||
*/
|
||||
if (strcmp(relationName, RelationRelationName) == 0 ||
|
||||
strcmp(relationName, AttributeRelationName) == 0 ||
|
||||
strcmp(relationName, ProcedureRelationName) == 0 ||
|
||||
strcmp(relationName, TypeRelationName) == 0)
|
||||
relation->rd_rel->relhasindex = true;
|
||||
/* Otherwise, all the rels formrdesc is used for have indexes */
|
||||
relation->rd_rel->relhasindex = true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.63 2002/03/02 21:39:33 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.64 2002/04/27 21:24:34 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Globals used all over the place should be declared here and not
|
||||
@@ -18,14 +18,6 @@
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/types.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "catalog/catname.h"
|
||||
#include "catalog/indexing.h"
|
||||
#include "libpq/pqcomm.h"
|
||||
#include "miscadmin.h"
|
||||
#include "storage/backendid.h"
|
||||
@@ -47,14 +39,11 @@ struct Port *MyProcPort;
|
||||
long MyCancelKey;
|
||||
|
||||
char *DataDir = NULL;
|
||||
|
||||
/*
|
||||
* The PGDATA directory user says to use, or defaults to via environment
|
||||
* variable. NULL if no option given and no environment variable set
|
||||
*/
|
||||
|
||||
Relation reldesc; /* current relation descriptor */
|
||||
|
||||
char OutputFileName[MAXPGPATH];
|
||||
|
||||
char pg_pathname[MAXPGPATH]; /* full path to postgres
|
||||
@@ -85,27 +74,3 @@ bool allowSystemTableMods = false;
|
||||
int SortMem = 512;
|
||||
int VacuumMem = 8192;
|
||||
int NBuffers = DEF_NBUFFERS;
|
||||
|
||||
|
||||
/* ----------------
|
||||
* List of relations that are shared across all databases in an installation.
|
||||
*
|
||||
* This used to be binary-searched, requiring that it be kept in sorted order.
|
||||
* We just do a linear search now so there's no requirement that the list
|
||||
* be ordered. The list is so small it shouldn't make much difference.
|
||||
* make sure the list is null-terminated
|
||||
* - jolly 8/19/95
|
||||
* ----------------
|
||||
*/
|
||||
char *SharedSystemRelationNames[] = {
|
||||
DatabaseRelationName,
|
||||
DatabaseNameIndex,
|
||||
DatabaseOidIndex,
|
||||
GroupRelationName,
|
||||
GroupNameIndex,
|
||||
GroupSysidIndex,
|
||||
ShadowRelationName,
|
||||
ShadowNameIndex,
|
||||
ShadowSysidIndex,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.86 2002/04/04 04:25:49 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.87 2002/04/27 21:24:34 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -612,9 +612,8 @@ InitializeSessionUserId(const char *username)
|
||||
Anum_pg_shadow_useconfig, &isnull);
|
||||
if (!isnull)
|
||||
{
|
||||
ArrayType *a;
|
||||
ArrayType *a = DatumGetArrayTypeP(datum);
|
||||
|
||||
a = (ArrayType *) pg_detoast_datum((struct varlena *)datum);
|
||||
ProcessGUCArray(a, PGC_S_USER);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.102 2002/04/01 03:34:26 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.103 2002/04/27 21:24:34 tgl Exp $
|
||||
*
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -138,7 +138,7 @@ ReverifyMyDatabase(const char *name)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set up datbase-specific configuration variables.
|
||||
* Set up database-specific configuration variables.
|
||||
*/
|
||||
if (IsUnderPostmaster)
|
||||
{
|
||||
@@ -149,9 +149,8 @@ ReverifyMyDatabase(const char *name)
|
||||
RelationGetDescr(pgdbrel), &isnull);
|
||||
if (!isnull)
|
||||
{
|
||||
ArrayType *a;
|
||||
ArrayType *a = DatumGetArrayTypeP(datum);
|
||||
|
||||
a = (ArrayType *) pg_detoast_datum((struct varlena *)datum);
|
||||
ProcessGUCArray(a, PGC_S_DATABASE);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user