After looking closer once again, I don't like this patch. I think the FOOBAR_ENUM_DEF defines serve no purpose, other than source-code placement next to the enum value definitions. I think for example check_option, living in reloptions.c, should look like this:
{ { "check_option", "View has WITH CHECK OPTION defined (local or cascaded).", RELOPT_KIND_VIEW, AccessExclusiveLock }, { { "local", VIEW_OPTION_CHECK_OPTION_LOCAL }, { "cascaded", VIEW_OPTION_CHECK_OPTION_CASCADED }, { NULL } }, "Valid values are \"local\" and \"cascaded\"." }, Note the relopt_enum is pretty much the same you have, except we also have a const char *valid_values_errdetail; and the ugly #define no longer exists but instead we put it in enumRelOpts. rel.h ends up like this: /* * Values for ViewOptions->check_option. */ typedef enum { VIEWOPTIONS_CHECK_OPTION_NOTSET, VIEWOPTIONS_CHECK_OPTION_LOCAL, VIEWOPTIONS_CHECK_OPTION_CASCADED } ViewOpts_CheckOptionValues; /* * ViewOptions * Contents of rd_options for views */ typedef struct ViewOptions { int32 vl_len_; /* varlena header (do not touch directly!) */ bool security_barrier; ViewOpts_CheckOptionValues check_option; } ViewOptions; I'm marking this Waiting on Author. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services