From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com>, Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com>, Jaimin Pan <jaimin(dot)pan(at)gmail(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: [HACKERS] object_classes array is broken, again |
Date: | 2015-07-20 10:14:31 |
Message-ID: | 20150720101431.GJ2301@postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs 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
From | Date | Subject | |
---|---|---|---|
Next Message | Jeevan Chalke | 2015-07-20 10:15:21 | Re: [HACKERS] Grouping Sets: Fix unrecognized node type bug |
Previous Message | Sandeep Thakkar | 2015-07-20 05:52:14 | Re: BUG #13500: Windows binary zip doesn't include libintl.h |
From | Date | Subject | |
---|---|---|---|
Next Message | Jeevan Chalke | 2015-07-20 10:15:21 | Re: [HACKERS] Grouping Sets: Fix unrecognized node type bug |
Previous Message | Pavel Stehule | 2015-07-20 09:55:06 | Re: Implementation of global temporary tables? |