Re: object_classes array is broken, again - Mailing list pgsql-hackers
From | Alvaro Herrera |
---|---|
Subject | Re: object_classes array is broken, again |
Date | |
Msg-id | 20150720101431.GJ2301@postgresql.org Whole thread Raw |
In response to | object_classes array is broken, again (Robert Haas <robertmhaas@gmail.com>) |
Responses |
Re: [BUGS] object_classes array is broken, again
|
List | pgsql-hackers |
Any opinions on this idea? I don't like it all that much, but it's plenty effective. Alvaro Herrera wrote: > The problem is that there aren't enough callers of add_object_address: > there are many indexes of that array that aren't ever accessed and so > it's not obvious when the array is broken. If we were to put > OCLASS_CLASS at the end instead of at the beginning, that would fix the > problem by making it immediately obvious when things get broken this > way, because the value used in the most common case would shift around > every time we add another value. (Of course, we'd have to instruct > people to not add new members after the pg_class entry.) > diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c > index c1212e9..0107c53 100644 > --- a/src/backend/catalog/dependency.c > +++ b/src/backend/catalog/dependency.c > @@ -127,7 +127,6 @@ typedef struct > * See also getObjectClass(). > */ > static const Oid object_classes[MAX_OCLASS] = { > - RelationRelationId, /* OCLASS_CLASS */ > ProcedureRelationId, /* OCLASS_PROC */ > TypeRelationId, /* OCLASS_TYPE */ > CastRelationId, /* OCLASS_CAST */ > @@ -158,7 +157,9 @@ static const Oid object_classes[MAX_OCLASS] = { > DefaultAclRelationId, /* OCLASS_DEFACL */ > ExtensionRelationId, /* OCLASS_EXTENSION */ > EventTriggerRelationId, /* OCLASS_EVENT_TRIGGER */ > - PolicyRelationId /* OCLASS_POLICY */ > + PolicyRelationId, /* OCLASS_POLICY */ > + TransformRelationId, /* OCLASS_POLICY */ > + RelationRelationId /* OCLASS_CLASS */ > }; > > > diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h > index 5da18c2..6f4802d 100644 > --- a/src/include/catalog/dependency.h > +++ b/src/include/catalog/dependency.h > @@ -112,11 +112,10 @@ typedef struct ObjectAddresses ObjectAddresses; > > /* > * This enum covers all system catalogs whose OIDs can appear in > - * pg_depend.classId or pg_shdepend.classId. > + * pg_depend.classId or pg_shdepend.classId. See also object_classes[]. > */ > typedef enum ObjectClass > { > - OCLASS_CLASS, /* pg_class */ > OCLASS_PROC, /* pg_proc */ > OCLASS_TYPE, /* pg_type */ > OCLASS_CAST, /* pg_cast */ > @@ -149,6 +148,11 @@ typedef enum ObjectClass > OCLASS_EVENT_TRIGGER, /* pg_event_trigger */ > OCLASS_POLICY, /* pg_policy */ > OCLASS_TRANSFORM, /* pg_transform */ > + /* > + * Keep this previous-to-last, see > + * https://www.postgresql.org/message-id/ > + */ > + OCLASS_CLASS, /* pg_class */ > MAX_OCLASS /* MUST BE LAST */ > } ObjectClass; > -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
pgsql-hackers by date: