mirror of
https://github.com/postgres/postgres.git
synced 2025-07-12 21:01:52 +03:00
Allow extracting and parsing of reloptions from a bare pg_class tuple, and
refactor the relcache code that used to do that. This allows other callers (particularly autovacuum) to do the same without necessarily having to open and lock a table.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.18 2009/01/12 21:02:14 alvherre Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.19 2009/01/26 19:41:06 alvherre Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -558,6 +558,53 @@ untransformRelOptions(Datum options)
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract and parse reloptions from a pg_class tuple.
|
||||
*
|
||||
* This is a low-level routine, expected to be used by relcache code and
|
||||
* callers that do not have a table's relcache entry (e.g. autovacuum). For
|
||||
* other uses, consider grabbing the rd_options pointer from the relcache entry
|
||||
* instead.
|
||||
*
|
||||
* tupdesc is pg_class' tuple descriptor. amoptions is the amoptions regproc
|
||||
* in the case of the tuple corresponding to an index, or InvalidOid otherwise.
|
||||
*/
|
||||
bytea *
|
||||
extractRelOptions(HeapTuple tuple, TupleDesc tupdesc, Oid amoptions)
|
||||
{
|
||||
bytea *options;
|
||||
bool isnull;
|
||||
Datum datum;
|
||||
Form_pg_class classForm;
|
||||
|
||||
datum = fastgetattr(tuple,
|
||||
Anum_pg_class_reloptions,
|
||||
tupdesc,
|
||||
&isnull);
|
||||
if (isnull)
|
||||
return NULL;
|
||||
|
||||
classForm = (Form_pg_class) GETSTRUCT(tuple);
|
||||
|
||||
/* Parse into appropriate format; don't error out here */
|
||||
switch (classForm->relkind)
|
||||
{
|
||||
case RELKIND_RELATION:
|
||||
case RELKIND_TOASTVALUE:
|
||||
case RELKIND_UNCATALOGED:
|
||||
options = heap_reloptions(classForm->relkind, datum, false);
|
||||
break;
|
||||
case RELKIND_INDEX:
|
||||
options = index_reloptions(amoptions, datum, false);
|
||||
break;
|
||||
default:
|
||||
Assert(false); /* can't get here */
|
||||
options = NULL; /* keep compiler quiet */
|
||||
break;
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
/*
|
||||
* Interpret reloptions that are given in text-array format.
|
||||
|
Reference in New Issue
Block a user