mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Error message editing in backend/utils (except /adt).
This commit is contained in:
22
src/backend/utils/cache/catcache.c
vendored
22
src/backend/utils/cache/catcache.c
vendored
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.104 2003/06/22 22:04:54 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.105 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -158,8 +158,7 @@ GetCCHashEqFuncs(Oid keytype, PGFunction *hashfunc, RegProcedure *eqfunc)
|
||||
*eqfunc = F_OIDVECTOREQ;
|
||||
break;
|
||||
default:
|
||||
elog(FATAL, "GetCCHashEqFuncs: type %u unsupported as catcache key",
|
||||
keytype);
|
||||
elog(FATAL, "type %u not supported as catcache key", keytype);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -202,7 +201,7 @@ CatalogCacheComputeHashValue(CatCache *cache, int nkeys, ScanKey cur_skey)
|
||||
cur_skey[0].sk_argument));
|
||||
break;
|
||||
default:
|
||||
elog(FATAL, "CCComputeHashValue: %d nkeys", nkeys);
|
||||
elog(FATAL, "wrong number of hash keys: %d", nkeys);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -267,8 +266,7 @@ CatalogCacheComputeTupleHashValue(CatCache *cache, HeapTuple tuple)
|
||||
Assert(!isNull);
|
||||
break;
|
||||
default:
|
||||
elog(FATAL, "CCComputeTupleHashValue: %d cc_nkeys",
|
||||
cache->cc_nkeys);
|
||||
elog(FATAL, "wrong number of hash keys: %d", cache->cc_nkeys);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -291,14 +289,14 @@ CatCachePrintStats(void)
|
||||
long cc_lsearches = 0;
|
||||
long cc_lhits = 0;
|
||||
|
||||
elog(DEBUG2, "Catcache stats dump: %d/%d tuples in catcaches",
|
||||
elog(DEBUG2, "catcache stats dump: %d/%d tuples in catcaches",
|
||||
CacheHdr->ch_ntup, CacheHdr->ch_maxtup);
|
||||
|
||||
for (cache = CacheHdr->ch_caches; cache; cache = cache->cc_next)
|
||||
{
|
||||
if (cache->cc_ntup == 0 && cache->cc_searches == 0)
|
||||
continue; /* don't print unused caches */
|
||||
elog(DEBUG2, "Catcache %s/%s: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld discards, %ld lsrch, %ld lhits",
|
||||
elog(DEBUG2, "catcache %s/%s: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld discards, %ld lsrch, %ld lhits",
|
||||
cache->cc_relname,
|
||||
cache->cc_indname,
|
||||
cache->cc_ntup,
|
||||
@ -322,7 +320,7 @@ CatCachePrintStats(void)
|
||||
cc_lsearches += cache->cc_lsearches;
|
||||
cc_lhits += cache->cc_lhits;
|
||||
}
|
||||
elog(DEBUG2, "Catcache totals: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld discards, %ld lsrch, %ld lhits",
|
||||
elog(DEBUG2, "catcache totals: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld discards, %ld lsrch, %ld lhits",
|
||||
CacheHdr->ch_ntup,
|
||||
cc_searches,
|
||||
cc_hits,
|
||||
@ -557,7 +555,7 @@ AtEOXact_CatCache(bool isCommit)
|
||||
if (cl->refcount != 0)
|
||||
{
|
||||
if (isCommit)
|
||||
elog(WARNING, "Cache reference leak: cache %s (%d), list %p has count %d",
|
||||
elog(WARNING, "cache reference leak: cache %s (%d), list %p has count %d",
|
||||
ccp->cc_relname, ccp->id, cl, cl->refcount);
|
||||
cl->refcount = 0;
|
||||
}
|
||||
@ -580,7 +578,7 @@ AtEOXact_CatCache(bool isCommit)
|
||||
if (ct->refcount != 0)
|
||||
{
|
||||
if (isCommit)
|
||||
elog(WARNING, "Cache reference leak: cache %s (%d), tuple %u has count %d",
|
||||
elog(WARNING, "cache reference leak: cache %s (%d), tuple %u has count %d",
|
||||
ct->my_cache->cc_relname, ct->my_cache->id,
|
||||
HeapTupleGetOid(&ct->tuple),
|
||||
ct->refcount);
|
||||
@ -947,7 +945,7 @@ CatalogCacheInitializeCache(CatCache *cache)
|
||||
else
|
||||
{
|
||||
if (cache->cc_key[i] != ObjectIdAttributeNumber)
|
||||
elog(FATAL, "CatalogCacheInit: only sys attr supported is OID");
|
||||
elog(FATAL, "only sys attr supported in caches is OID");
|
||||
keytype = OIDOID;
|
||||
}
|
||||
|
||||
|
9
src/backend/utils/cache/inval.c
vendored
9
src/backend/utils/cache/inval.c
vendored
@ -74,7 +74,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.55 2002/09/04 20:31:29 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.56 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -450,8 +450,7 @@ LocalExecuteInvalidationMessage(SharedInvalidationMessage *msg)
|
||||
}
|
||||
else
|
||||
{
|
||||
elog(FATAL, "ExecuteInvalidationMessage: bogus message id %d",
|
||||
msg->id);
|
||||
elog(FATAL, "unrecognized SI message id: %d", msg->id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -705,7 +704,7 @@ CacheRegisterSyscacheCallback(int cacheid,
|
||||
Datum arg)
|
||||
{
|
||||
if (cache_callback_count >= MAX_CACHE_CALLBACKS)
|
||||
elog(FATAL, "Out of cache_callback_list slots");
|
||||
elog(FATAL, "out of cache_callback_list slots");
|
||||
|
||||
cache_callback_list[cache_callback_count].id = cacheid;
|
||||
cache_callback_list[cache_callback_count].function = func;
|
||||
@ -728,7 +727,7 @@ CacheRegisterRelcacheCallback(CacheCallbackFunction func,
|
||||
Datum arg)
|
||||
{
|
||||
if (cache_callback_count >= MAX_CACHE_CALLBACKS)
|
||||
elog(FATAL, "Out of cache_callback_list slots");
|
||||
elog(FATAL, "out of cache_callback_list slots");
|
||||
|
||||
cache_callback_list[cache_callback_count].id = SHAREDINVALRELCACHE_ID;
|
||||
cache_callback_list[cache_callback_count].function = func;
|
||||
|
99
src/backend/utils/cache/lsyscache.c
vendored
99
src/backend/utils/cache/lsyscache.c
vendored
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.101 2003/07/01 19:10:53 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.102 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Eventually, the index information should go through here, too.
|
||||
@ -74,7 +74,7 @@ op_requires_recheck(Oid opno, Oid opclass)
|
||||
ObjectIdGetDatum(opclass),
|
||||
0, 0);
|
||||
if (!HeapTupleIsValid(tp))
|
||||
elog(ERROR, "op_requires_recheck: op %u is not a member of opclass %u",
|
||||
elog(ERROR, "operator %u is not a member of opclass %u",
|
||||
opno, opclass);
|
||||
amop_tup = (Form_pg_amop) GETSTRUCT(tp);
|
||||
|
||||
@ -487,7 +487,7 @@ op_mergejoin_crossops(Oid opno, Oid *ltop, Oid *gtop,
|
||||
ObjectIdGetDatum(opno),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tp)) /* shouldn't happen */
|
||||
elog(ERROR, "op_mergejoin_crossops: operator %u not found", opno);
|
||||
elog(ERROR, "cache lookup failed for operator %u", opno);
|
||||
optup = (Form_pg_operator) GETSTRUCT(tp);
|
||||
*ltop = optup->oprltcmpop;
|
||||
*gtop = optup->oprgtcmpop;
|
||||
@ -495,14 +495,14 @@ op_mergejoin_crossops(Oid opno, Oid *ltop, Oid *gtop,
|
||||
|
||||
/* Check < op provided */
|
||||
if (!OidIsValid(*ltop))
|
||||
elog(ERROR, "op_mergejoin_crossops: mergejoin operator %u has no matching < operator",
|
||||
elog(ERROR, "mergejoin operator %u has no matching < operator",
|
||||
opno);
|
||||
if (ltproc)
|
||||
*ltproc = get_opcode(*ltop);
|
||||
|
||||
/* Check > op provided */
|
||||
if (!OidIsValid(*gtop))
|
||||
elog(ERROR, "op_mergejoin_crossops: mergejoin operator %u has no matching > operator",
|
||||
elog(ERROR, "mergejoin operator %u has no matching > operator",
|
||||
opno);
|
||||
if (gtproc)
|
||||
*gtproc = get_opcode(*gtop);
|
||||
@ -543,7 +543,7 @@ op_strict(Oid opno)
|
||||
RegProcedure funcid = get_opcode(opno);
|
||||
|
||||
if (funcid == (RegProcedure) InvalidOid)
|
||||
elog(ERROR, "Operator OID %u does not exist", opno);
|
||||
elog(ERROR, "operator %u does not exist", opno);
|
||||
|
||||
return func_strict((Oid) funcid);
|
||||
}
|
||||
@ -559,7 +559,7 @@ op_volatile(Oid opno)
|
||||
RegProcedure funcid = get_opcode(opno);
|
||||
|
||||
if (funcid == (RegProcedure) InvalidOid)
|
||||
elog(ERROR, "Operator OID %u does not exist", opno);
|
||||
elog(ERROR, "operator %u does not exist", opno);
|
||||
|
||||
return func_volatile((Oid) funcid);
|
||||
}
|
||||
@ -711,7 +711,7 @@ get_func_rettype(Oid funcid)
|
||||
ObjectIdGetDatum(funcid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tp))
|
||||
elog(ERROR, "Function OID %u does not exist", funcid);
|
||||
elog(ERROR, "cache lookup failed for function %u", funcid);
|
||||
|
||||
result = ((Form_pg_proc) GETSTRUCT(tp))->prorettype;
|
||||
ReleaseSysCache(tp);
|
||||
@ -736,7 +736,7 @@ get_func_signature(Oid funcid, Oid *argtypes, int *nargs)
|
||||
ObjectIdGetDatum(funcid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tp))
|
||||
elog(ERROR, "Function OID %u does not exist", funcid);
|
||||
elog(ERROR, "cache lookup failed for function %u", funcid);
|
||||
|
||||
procstruct = (Form_pg_proc) GETSTRUCT(tp);
|
||||
|
||||
@ -762,7 +762,7 @@ get_func_retset(Oid funcid)
|
||||
ObjectIdGetDatum(funcid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tp))
|
||||
elog(ERROR, "Function OID %u does not exist", funcid);
|
||||
elog(ERROR, "cache lookup failed for function %u", funcid);
|
||||
|
||||
result = ((Form_pg_proc) GETSTRUCT(tp))->proretset;
|
||||
ReleaseSysCache(tp);
|
||||
@ -783,7 +783,7 @@ func_strict(Oid funcid)
|
||||
ObjectIdGetDatum(funcid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tp))
|
||||
elog(ERROR, "Function OID %u does not exist", funcid);
|
||||
elog(ERROR, "cache lookup failed for function %u", funcid);
|
||||
|
||||
result = ((Form_pg_proc) GETSTRUCT(tp))->proisstrict;
|
||||
ReleaseSysCache(tp);
|
||||
@ -804,7 +804,7 @@ func_volatile(Oid funcid)
|
||||
ObjectIdGetDatum(funcid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tp))
|
||||
elog(ERROR, "Function OID %u does not exist", funcid);
|
||||
elog(ERROR, "cache lookup failed for function %u", funcid);
|
||||
|
||||
result = ((Form_pg_proc) GETSTRUCT(tp))->provolatile;
|
||||
ReleaseSysCache(tp);
|
||||
@ -842,7 +842,7 @@ get_system_catalog_relid(const char *catname)
|
||||
ObjectIdGetDatum(PG_CATALOG_NAMESPACE),
|
||||
0, 0);
|
||||
if (!OidIsValid(relid))
|
||||
elog(ERROR, "get_system_catalog_relid: cannot find %s", catname);
|
||||
elog(ERROR, "cache lookup failed for system relation %s", catname);
|
||||
|
||||
return relid;
|
||||
}
|
||||
@ -1264,7 +1264,7 @@ get_typdefault(Oid typid)
|
||||
ObjectIdGetDatum(typid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "get_typdefault: failed to lookup type %u", typid);
|
||||
elog(ERROR, "cache lookup failed for type %u", typid);
|
||||
type = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
/*
|
||||
@ -1343,7 +1343,7 @@ getBaseType(Oid typid)
|
||||
ObjectIdGetDatum(typid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tup))
|
||||
elog(ERROR, "getBaseType: failed to lookup type %u", typid);
|
||||
elog(ERROR, "cache lookup failed for type %u", typid);
|
||||
typTup = (Form_pg_type) GETSTRUCT(tup);
|
||||
if (typTup->typtype != 'd')
|
||||
{
|
||||
@ -1593,15 +1593,19 @@ getTypeInputInfo(Oid type, Oid *typInput, Oid *typElem)
|
||||
ObjectIdGetDatum(type),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "Cache lookup of type %u failed", type);
|
||||
elog(ERROR, "cache lookup failed for type %u", type);
|
||||
pt = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
if (!pt->typisdefined)
|
||||
elog(ERROR, "Type %s is only a shell",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("type %s is only a shell",
|
||||
format_type_be(type))));
|
||||
if (!OidIsValid(pt->typinput))
|
||||
elog(ERROR, "No input function available for type %s",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_FUNCTION),
|
||||
errmsg("no input function available for type %s",
|
||||
format_type_be(type))));
|
||||
|
||||
*typInput = pt->typinput;
|
||||
*typElem = pt->typelem;
|
||||
@ -1625,15 +1629,19 @@ getTypeOutputInfo(Oid type, Oid *typOutput, Oid *typElem,
|
||||
ObjectIdGetDatum(type),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "Cache lookup of type %u failed", type);
|
||||
elog(ERROR, "cache lookup failed for type %u", type);
|
||||
pt = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
if (!pt->typisdefined)
|
||||
elog(ERROR, "Type %s is only a shell",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("type %s is only a shell",
|
||||
format_type_be(type))));
|
||||
if (!OidIsValid(pt->typoutput))
|
||||
elog(ERROR, "No output function available for type %s",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_FUNCTION),
|
||||
errmsg("no output function available for type %s",
|
||||
format_type_be(type))));
|
||||
|
||||
*typOutput = pt->typoutput;
|
||||
*typElem = pt->typelem;
|
||||
@ -1657,15 +1665,19 @@ getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typElem)
|
||||
ObjectIdGetDatum(type),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "Cache lookup of type %u failed", type);
|
||||
elog(ERROR, "cache lookup failed for type %u", type);
|
||||
pt = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
if (!pt->typisdefined)
|
||||
elog(ERROR, "Type %s is only a shell",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("type %s is only a shell",
|
||||
format_type_be(type))));
|
||||
if (!OidIsValid(pt->typreceive))
|
||||
elog(ERROR, "No binary input function available for type %s",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_FUNCTION),
|
||||
errmsg("no binary input function available for type %s",
|
||||
format_type_be(type))));
|
||||
|
||||
*typReceive = pt->typreceive;
|
||||
*typElem = pt->typelem;
|
||||
@ -1689,15 +1701,19 @@ getTypeBinaryOutputInfo(Oid type, Oid *typSend, Oid *typElem,
|
||||
ObjectIdGetDatum(type),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "Cache lookup of type %u failed", type);
|
||||
elog(ERROR, "cache lookup failed for type %u", type);
|
||||
pt = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
if (!pt->typisdefined)
|
||||
elog(ERROR, "Type %s is only a shell",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("type %s is only a shell",
|
||||
format_type_be(type))));
|
||||
if (!OidIsValid(pt->typsend))
|
||||
elog(ERROR, "No binary output function available for type %s",
|
||||
format_type_be(type));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_FUNCTION),
|
||||
errmsg("no binary output function available for type %s",
|
||||
format_type_be(type))));
|
||||
|
||||
*typSend = pt->typsend;
|
||||
*typElem = pt->typelem;
|
||||
@ -1791,7 +1807,7 @@ get_attstatsslot(HeapTuple statstuple,
|
||||
Anum_pg_statistic_stavalues1 + i,
|
||||
&isnull);
|
||||
if (isnull)
|
||||
elog(ERROR, "get_attstatsslot: stavalues is null");
|
||||
elog(ERROR, "stavalues is null");
|
||||
statarray = DatumGetArrayTypeP(val);
|
||||
|
||||
/* Need to get info about the array element type */
|
||||
@ -1799,8 +1815,7 @@ get_attstatsslot(HeapTuple statstuple,
|
||||
ObjectIdGetDatum(atttype),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "get_attstatsslot: Cache lookup failed for type %u",
|
||||
atttype);
|
||||
elog(ERROR, "cache lookup failed for type %u", atttype);
|
||||
typeForm = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
/* Deconstruct array into Datum elements */
|
||||
@ -1841,7 +1856,7 @@ get_attstatsslot(HeapTuple statstuple,
|
||||
Anum_pg_statistic_stanumbers1 + i,
|
||||
&isnull);
|
||||
if (isnull)
|
||||
elog(ERROR, "get_attstatsslot: stanumbers is null");
|
||||
elog(ERROR, "stanumbers is null");
|
||||
statarray = DatumGetArrayTypeP(val);
|
||||
|
||||
/*
|
||||
@ -1852,7 +1867,7 @@ get_attstatsslot(HeapTuple statstuple,
|
||||
narrayelem = ARR_DIMS(statarray)[0];
|
||||
if (ARR_NDIM(statarray) != 1 || narrayelem <= 0 ||
|
||||
ARR_ELEMTYPE(statarray) != FLOAT4OID)
|
||||
elog(ERROR, "get_attstatsslot: stanumbers is not a 1-D float4 array");
|
||||
elog(ERROR, "stanumbers is not a 1-D float4 array");
|
||||
*numbers = (float4 *) palloc(narrayelem * sizeof(float4));
|
||||
memcpy(*numbers, ARR_DATA_PTR(statarray), narrayelem * sizeof(float4));
|
||||
*nnumbers = narrayelem;
|
||||
@ -1939,7 +1954,9 @@ get_usesysid(const char *username)
|
||||
PointerGetDatum(username),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(userTup))
|
||||
elog(ERROR, "user \"%s\" does not exist", username);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("user \"%s\" does not exist", username)));
|
||||
|
||||
result = ((Form_pg_shadow) GETSTRUCT(userTup))->usesysid;
|
||||
|
||||
|
125
src/backend/utils/cache/relcache.c
vendored
125
src/backend/utils/cache/relcache.c
vendored
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.185 2003/05/28 16:03:59 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.186 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -167,7 +167,9 @@ do { \
|
||||
HASH_ENTER, \
|
||||
&found); \
|
||||
if (idhentry == NULL) \
|
||||
elog(ERROR, "out of memory for relation descriptor cache"); \
|
||||
ereport(ERROR, \
|
||||
(errcode(ERRCODE_OUT_OF_MEMORY), \
|
||||
errmsg("out of memory"))); \
|
||||
/* used to give notice if found -- now just keep quiet */ \
|
||||
idhentry->reldesc = RELATION; \
|
||||
nodentry = (RelNodeCacheEnt*)hash_search(RelationNodeCache, \
|
||||
@ -175,7 +177,9 @@ do { \
|
||||
HASH_ENTER, \
|
||||
&found); \
|
||||
if (nodentry == NULL) \
|
||||
elog(ERROR, "out of memory for relation descriptor cache"); \
|
||||
ereport(ERROR, \
|
||||
(errcode(ERRCODE_OUT_OF_MEMORY), \
|
||||
errmsg("out of memory"))); \
|
||||
/* used to give notice if found -- now just keep quiet */ \
|
||||
nodentry->reldesc = RELATION; \
|
||||
if (IsSystemNamespace(RelationGetNamespace(RELATION))) \
|
||||
@ -187,7 +191,9 @@ do { \
|
||||
HASH_ENTER, \
|
||||
&found); \
|
||||
if (namehentry == NULL) \
|
||||
elog(ERROR, "out of memory for relation descriptor cache"); \
|
||||
ereport(ERROR, \
|
||||
(errcode(ERRCODE_OUT_OF_MEMORY), \
|
||||
errmsg("out of memory"))); \
|
||||
/* used to give notice if found -- now just keep quiet */ \
|
||||
namehentry->reldesc = RELATION; \
|
||||
} \
|
||||
@ -233,12 +239,12 @@ do { \
|
||||
(void *)&(RELATION->rd_id), \
|
||||
HASH_REMOVE, NULL); \
|
||||
if (idhentry == NULL) \
|
||||
elog(WARNING, "trying to delete a rd_id reldesc that does not exist."); \
|
||||
elog(WARNING, "trying to delete a rd_id reldesc that does not exist"); \
|
||||
nodentry = (RelNodeCacheEnt*)hash_search(RelationNodeCache, \
|
||||
(void *)&(RELATION->rd_node), \
|
||||
HASH_REMOVE, NULL); \
|
||||
if (nodentry == NULL) \
|
||||
elog(WARNING, "trying to delete a rd_node reldesc that does not exist."); \
|
||||
elog(WARNING, "trying to delete a rd_node reldesc that does not exist"); \
|
||||
if (IsSystemNamespace(RelationGetNamespace(RELATION))) \
|
||||
{ \
|
||||
char *relname = RelationGetRelationName(RELATION); \
|
||||
@ -247,7 +253,7 @@ do { \
|
||||
relname, \
|
||||
HASH_REMOVE, NULL); \
|
||||
if (namehentry == NULL) \
|
||||
elog(WARNING, "trying to delete a relname reldesc that does not exist."); \
|
||||
elog(WARNING, "trying to delete a relname reldesc that does not exist"); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
@ -353,7 +359,8 @@ ScanPgRelation(RelationBuildDescInfo buildinfo)
|
||||
break;
|
||||
|
||||
default:
|
||||
elog(ERROR, "ScanPgRelation: bad buildinfo");
|
||||
elog(ERROR, "unrecognized buildinfo type: %d",
|
||||
buildinfo.infotype);
|
||||
return NULL; /* keep compiler quiet */
|
||||
}
|
||||
|
||||
@ -507,7 +514,7 @@ RelationBuildTupleDesc(RelationBuildDescInfo buildinfo,
|
||||
|
||||
if (attp->attnum <= 0 ||
|
||||
attp->attnum > relation->rd_rel->relnatts)
|
||||
elog(ERROR, "Bogus attribute number %d for %s",
|
||||
elog(ERROR, "invalid attribute number %d for %s",
|
||||
attp->attnum, RelationGetRelationName(relation));
|
||||
|
||||
relation->rd_att->attrs[attp->attnum - 1] =
|
||||
@ -961,7 +968,7 @@ RelationInitIndexAccessInfo(Relation relation)
|
||||
ObjectIdGetDatum(RelationGetRelid(relation)),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
elog(ERROR, "RelationInitIndexAccessInfo: no pg_index entry for index %u",
|
||||
elog(ERROR, "cache lookup failed for index %u",
|
||||
RelationGetRelid(relation));
|
||||
oldcontext = MemoryContextSwitchTo(CacheMemoryContext);
|
||||
relation->rd_indextuple = heap_copytuple(tuple);
|
||||
@ -976,7 +983,7 @@ RelationInitIndexAccessInfo(Relation relation)
|
||||
ObjectIdGetDatum(relation->rd_rel->relam),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
elog(ERROR, "RelationInitIndexAccessInfo: cache lookup failed for AM %u",
|
||||
elog(ERROR, "cache lookup failed for access method %u",
|
||||
relation->rd_rel->relam);
|
||||
aform = (Form_pg_am) MemoryContextAlloc(CacheMemoryContext, sizeof *aform);
|
||||
memcpy(aform, GETSTRUCT(tuple), sizeof *aform);
|
||||
@ -985,7 +992,7 @@ RelationInitIndexAccessInfo(Relation relation)
|
||||
|
||||
natts = relation->rd_rel->relnatts;
|
||||
if (natts != relation->rd_index->indnatts)
|
||||
elog(ERROR, "RelationInitIndexAccessInfo: relnatts disagrees with indnatts for index %u",
|
||||
elog(ERROR, "relnatts disagrees with indnatts for index %u",
|
||||
RelationGetRelid(relation));
|
||||
amstrategies = aform->amstrategies;
|
||||
amsupport = aform->amsupport;
|
||||
@ -1099,7 +1106,7 @@ IndexSupportInitialize(Form_pg_index iform,
|
||||
OpClassCacheEnt *opcentry;
|
||||
|
||||
if (!OidIsValid(iform->indclass[attIndex]))
|
||||
elog(ERROR, "IndexSupportInitialize: bogus pg_index tuple");
|
||||
elog(ERROR, "bogus pg_index tuple");
|
||||
|
||||
/* look up the info for this opclass, using a cache */
|
||||
opcentry = LookupOpclassInfo(iform->indclass[attIndex],
|
||||
@ -1206,7 +1213,9 @@ LookupOpclassInfo(Oid operatorClassOid,
|
||||
(void *) &operatorClassOid,
|
||||
HASH_ENTER, &found);
|
||||
if (opcentry == NULL)
|
||||
elog(ERROR, "out of memory for operator class cache");
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_OUT_OF_MEMORY),
|
||||
errmsg("out of memory")));
|
||||
|
||||
if (found && opcentry->valid)
|
||||
{
|
||||
@ -1280,7 +1289,7 @@ LookupOpclassInfo(Oid operatorClassOid,
|
||||
|
||||
if (amopform->amopstrategy <= 0 ||
|
||||
(StrategyNumber) amopform->amopstrategy > numStrats)
|
||||
elog(ERROR, "Bogus amopstrategy number %d for opclass %u",
|
||||
elog(ERROR, "invalid amopstrategy number %d for opclass %u",
|
||||
amopform->amopstrategy, operatorClassOid);
|
||||
opcentry->operatorOids[amopform->amopstrategy - 1] =
|
||||
amopform->amopopr;
|
||||
@ -1315,7 +1324,7 @@ LookupOpclassInfo(Oid operatorClassOid,
|
||||
|
||||
if (amprocform->amprocnum <= 0 ||
|
||||
(StrategyNumber) amprocform->amprocnum > numSupport)
|
||||
elog(ERROR, "Bogus amproc number %d for opclass %u",
|
||||
elog(ERROR, "invalid amproc number %d for opclass %u",
|
||||
amprocform->amprocnum, operatorClassOid);
|
||||
|
||||
opcentry->supportProcs[amprocform->amprocnum - 1] =
|
||||
@ -1659,10 +1668,8 @@ RelationReloadClassinfo(Relation relation)
|
||||
buildinfo.i.info_id = relation->rd_id;
|
||||
pg_class_tuple = ScanPgRelation(buildinfo);
|
||||
if (!HeapTupleIsValid(pg_class_tuple))
|
||||
{
|
||||
elog(ERROR, "RelationReloadClassinfo system relation id=%d doesn't exist", relation->rd_id);
|
||||
return;
|
||||
}
|
||||
elog(ERROR, "could not find tuple for system relation %u",
|
||||
relation->rd_id);
|
||||
RelationCacheDelete(relation);
|
||||
relp = (Form_pg_class) GETSTRUCT(pg_class_tuple);
|
||||
memcpy((char *) relation->rd_rel, (char *) relp, CLASS_TUPLE_SIZE);
|
||||
@ -1787,7 +1794,7 @@ RelationClearRelation(Relation relation, bool rebuild)
|
||||
if (old_rulescxt)
|
||||
MemoryContextDelete(old_rulescxt);
|
||||
pfree(relation);
|
||||
elog(ERROR, "RelationClearRelation: relation %u deleted while still in use",
|
||||
elog(ERROR, "relation %u deleted while still in use",
|
||||
buildinfo.i.info_id);
|
||||
}
|
||||
RelationSetReferenceCount(relation, old_refcnt);
|
||||
@ -1870,7 +1877,7 @@ RelationForgetRelation(Oid rid)
|
||||
return; /* not in cache, nothing to do */
|
||||
|
||||
if (!RelationHasReferenceCountZero(relation))
|
||||
elog(ERROR, "RelationForgetRelation: relation %u is still open", rid);
|
||||
elog(ERROR, "relation %u is still open", rid);
|
||||
|
||||
/* Unconditionally destroy the relcache entry */
|
||||
RelationClearRelation(relation, false);
|
||||
@ -2008,7 +2015,7 @@ AtEOXact_RelationCache(bool commit)
|
||||
/*
|
||||
* During transaction abort, we must also reset relcache entry ref
|
||||
* counts to their normal not-in-a-transaction state. A ref count
|
||||
* may be too high because some routine was exited by elog()
|
||||
* may be too high because some routine was exited by ereport()
|
||||
* between incrementing and decrementing the count.
|
||||
*
|
||||
* During commit, we should not have to do this, but it's still
|
||||
@ -2027,7 +2034,7 @@ AtEOXact_RelationCache(bool commit)
|
||||
if (relation->rd_refcnt != expected_refcnt &&
|
||||
!IsBootstrapProcessingMode())
|
||||
{
|
||||
elog(WARNING, "Relcache reference leak: relation \"%s\" has refcnt %d instead of %d",
|
||||
elog(WARNING, "relcache reference leak: relation \"%s\" has refcnt %d instead of %d",
|
||||
RelationGetRelationName(relation),
|
||||
relation->rd_refcnt, expected_refcnt);
|
||||
RelationSetReferenceCount(relation, expected_refcnt);
|
||||
@ -2324,8 +2331,8 @@ RelationCacheInitializePhase2(void)
|
||||
ObjectIdGetDatum(RelationGetRelid(relation)),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(htup))
|
||||
elog(FATAL, "RelationCacheInitializePhase2: no pg_class entry for %s",
|
||||
RelationGetRelationName(relation));
|
||||
elog(FATAL, "cache lookup failed for relation %u",
|
||||
RelationGetRelid(relation));
|
||||
relp = (Form_pg_class) GETSTRUCT(htup);
|
||||
|
||||
/*
|
||||
@ -2466,21 +2473,22 @@ AttrDefaultFetch(Relation relation)
|
||||
{
|
||||
Form_pg_attrdef adform = (Form_pg_attrdef) GETSTRUCT(htup);
|
||||
|
||||
found++;
|
||||
for (i = 0; i < ndef; i++)
|
||||
{
|
||||
if (adform->adnum != attrdef[i].adnum)
|
||||
continue;
|
||||
if (attrdef[i].adbin != NULL)
|
||||
elog(WARNING, "AttrDefaultFetch: second record found for attr %s in rel %s",
|
||||
elog(WARNING, "multiple attrdef records found for attr %s of rel %s",
|
||||
NameStr(relation->rd_att->attrs[adform->adnum - 1]->attname),
|
||||
RelationGetRelationName(relation));
|
||||
else
|
||||
found++;
|
||||
|
||||
val = fastgetattr(htup,
|
||||
Anum_pg_attrdef_adbin,
|
||||
adrel->rd_att, &isnull);
|
||||
if (isnull)
|
||||
elog(WARNING, "AttrDefaultFetch: adbin IS NULL for attr %s in rel %s",
|
||||
elog(WARNING, "null adbin for attr %s of rel %s",
|
||||
NameStr(relation->rd_att->attrs[adform->adnum - 1]->attname),
|
||||
RelationGetRelationName(relation));
|
||||
else
|
||||
@ -2491,16 +2499,15 @@ AttrDefaultFetch(Relation relation)
|
||||
}
|
||||
|
||||
if (i >= ndef)
|
||||
elog(WARNING, "AttrDefaultFetch: unexpected record found for attr %d in rel %s",
|
||||
adform->adnum,
|
||||
RelationGetRelationName(relation));
|
||||
elog(WARNING, "unexpected attrdef record found for attr %d of rel %s",
|
||||
adform->adnum, RelationGetRelationName(relation));
|
||||
}
|
||||
|
||||
systable_endscan(adscan);
|
||||
heap_close(adrel, AccessShareLock);
|
||||
|
||||
if (found != ndef)
|
||||
elog(WARNING, "AttrDefaultFetch: %d record(s) not found for rel %s",
|
||||
elog(WARNING, "%d attrdef record(s) missing for rel %s",
|
||||
ndef - found, RelationGetRelationName(relation));
|
||||
}
|
||||
|
||||
@ -2533,8 +2540,8 @@ CheckConstraintFetch(Relation relation)
|
||||
if (conform->contype != CONSTRAINT_CHECK)
|
||||
continue;
|
||||
|
||||
if (found == ncheck)
|
||||
elog(ERROR, "CheckConstraintFetch: unexpected record found for rel %s",
|
||||
if (found >= ncheck)
|
||||
elog(ERROR, "unexpected constraint record found for rel %s",
|
||||
RelationGetRelationName(relation));
|
||||
|
||||
check[found].ccname = MemoryContextStrdup(CacheMemoryContext,
|
||||
@ -2545,7 +2552,7 @@ CheckConstraintFetch(Relation relation)
|
||||
Anum_pg_constraint_conbin,
|
||||
conrel->rd_att, &isnull);
|
||||
if (isnull)
|
||||
elog(ERROR, "CheckConstraintFetch: conbin IS NULL for rel %s",
|
||||
elog(ERROR, "null conbin for rel %s",
|
||||
RelationGetRelationName(relation));
|
||||
|
||||
check[found].ccbin = MemoryContextStrdup(CacheMemoryContext,
|
||||
@ -2558,7 +2565,7 @@ CheckConstraintFetch(Relation relation)
|
||||
heap_close(conrel, AccessShareLock);
|
||||
|
||||
if (found != ncheck)
|
||||
elog(ERROR, "CheckConstraintFetch: %d record(s) not found for rel %s",
|
||||
elog(ERROR, "%d constraint record(s) missing for rel %s",
|
||||
ncheck - found, RelationGetRelationName(relation));
|
||||
}
|
||||
|
||||
@ -3172,7 +3179,11 @@ write_relcache_init_file(void)
|
||||
* We used to consider this a fatal error, but we might as well
|
||||
* continue with backend startup ...
|
||||
*/
|
||||
elog(WARNING, "Cannot create init file %s: %m\n\tContinuing anyway, but there's something wrong.", tempfilename);
|
||||
ereport(WARNING,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not create init file \"%s\": %m",
|
||||
tempfilename),
|
||||
errdetail("Continuing anyway, but there's something wrong.")));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3196,28 +3207,28 @@ write_relcache_init_file(void)
|
||||
|
||||
/* first, write the relation descriptor length */
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- descriptor length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* next, write out the Relation structure */
|
||||
if (fwrite(rel, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- reldesc");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* next write the relation tuple form */
|
||||
len = sizeof(FormData_pg_class);
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- relation tuple form length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
if (fwrite(relform, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- relation tuple form");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* next, do all the attribute tuple form data entries */
|
||||
for (i = 0; i < relform->relnatts; i++)
|
||||
{
|
||||
len = ATTRIBUTE_TUPLE_SIZE;
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- length of attdesc %d", i);
|
||||
elog(FATAL, "could not write init file");
|
||||
if (fwrite(rel->rd_att->attrs[i], 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- attdesc %d", i);
|
||||
elog(FATAL, "could not write init file");
|
||||
}
|
||||
|
||||
/* If it's an index, there's more to do */
|
||||
@ -3229,43 +3240,43 @@ write_relcache_init_file(void)
|
||||
/* we assume this was created by heap_copytuple! */
|
||||
len = HEAPTUPLESIZE + rel->rd_indextuple->t_len;
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- index tuple length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
if (fwrite(rel->rd_indextuple, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- index tuple");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* next, write the access method tuple form */
|
||||
len = sizeof(FormData_pg_am);
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- am tuple form length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
if (fwrite(am, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- am tuple form");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* next, write the index strategy map */
|
||||
len = AttributeNumberGetIndexStrategySize(relform->relnatts,
|
||||
am->amstrategies);
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- strategy map length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
if (fwrite(rel->rd_istrat, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- strategy map");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* next, write the vector of operator OIDs */
|
||||
len = relform->relnatts * (am->amstrategies * sizeof(Oid));
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- operator vector length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
if (fwrite(rel->rd_operator, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- operator vector");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
/* finally, write the vector of support procedures */
|
||||
len = relform->relnatts * (am->amsupport * sizeof(RegProcedure));
|
||||
if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
|
||||
elog(FATAL, "cannot write init file -- support vector length");
|
||||
elog(FATAL, "could not write init file");
|
||||
|
||||
if (fwrite(rel->rd_support, 1, len, fp) != len)
|
||||
elog(FATAL, "cannot write init file -- support vector");
|
||||
elog(FATAL, "could not write init file");
|
||||
}
|
||||
|
||||
/* also make a list of their OIDs, for RelationIdIsInInitFile */
|
||||
@ -3309,7 +3320,11 @@ write_relcache_init_file(void)
|
||||
*/
|
||||
if (rename(tempfilename, finalfilename) < 0)
|
||||
{
|
||||
elog(WARNING, "Cannot rename init file %s to %s: %m\n\tContinuing anyway, but there's something wrong.", tempfilename, finalfilename);
|
||||
ereport(WARNING,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not rename init file \"%s\" to \"%s\": %m",
|
||||
tempfilename, finalfilename),
|
||||
errdetail("Continuing anyway, but there's something wrong.")));
|
||||
|
||||
/*
|
||||
* If we fail, try to clean up the useless temp file; don't
|
||||
|
12
src/backend/utils/cache/syscache.c
vendored
12
src/backend/utils/cache/syscache.c
vendored
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.88 2003/05/13 04:38:58 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.89 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* These routines allow the parser/planner/executor to perform
|
||||
@ -475,7 +475,7 @@ InitCatalogCache(void)
|
||||
cacheinfo[cacheId].nkeys,
|
||||
cacheinfo[cacheId].key);
|
||||
if (!PointerIsValid(SysCache[cacheId]))
|
||||
elog(ERROR, "InitCatalogCache: Can't init cache %s (%d)",
|
||||
elog(ERROR, "could not initialize cache %s (%d)",
|
||||
cacheinfo[cacheId].name, cacheId);
|
||||
}
|
||||
CacheInitialized = true;
|
||||
@ -531,7 +531,7 @@ SearchSysCache(int cacheId,
|
||||
{
|
||||
if (cacheId < 0 || cacheId >= SysCacheSize ||
|
||||
!PointerIsValid(SysCache[cacheId]))
|
||||
elog(ERROR, "SearchSysCache: Bad cache id %d", cacheId);
|
||||
elog(ERROR, "invalid cache id: %d", cacheId);
|
||||
|
||||
return SearchCatCache(SysCache[cacheId], key1, key2, key3, key4);
|
||||
}
|
||||
@ -712,10 +712,10 @@ SysCacheGetAttr(int cacheId, HeapTuple tup,
|
||||
* then it should be.
|
||||
*/
|
||||
if (cacheId < 0 || cacheId >= SysCacheSize)
|
||||
elog(ERROR, "SysCacheGetAttr: Bad cache id %d", cacheId);
|
||||
elog(ERROR, "invalid cache id: %d", cacheId);
|
||||
if (!PointerIsValid(SysCache[cacheId]) ||
|
||||
!PointerIsValid(SysCache[cacheId]->cc_tupdesc))
|
||||
elog(ERROR, "SysCacheGetAttr: missing cache data for id %d", cacheId);
|
||||
elog(ERROR, "missing cache data for cache id %d", cacheId);
|
||||
|
||||
return heap_getattr(tup, attributeNumber,
|
||||
SysCache[cacheId]->cc_tupdesc,
|
||||
@ -731,7 +731,7 @@ SearchSysCacheList(int cacheId, int nkeys,
|
||||
{
|
||||
if (cacheId < 0 || cacheId >= SysCacheSize ||
|
||||
!PointerIsValid(SysCache[cacheId]))
|
||||
elog(ERROR, "SearchSysCacheList: Bad cache id %d", cacheId);
|
||||
elog(ERROR, "invalid cache id: %d", cacheId);
|
||||
|
||||
return SearchCatCacheList(SysCache[cacheId], nkeys,
|
||||
key1, key2, key3, key4);
|
||||
|
Reference in New Issue
Block a user