I notice that for a pg_amop object, getObjectDescription does this: /*------ translator: %d is the operator strategy (a number), the first two %s's are data type names, the third %s is the description of the operator family, and the last %s is the textual form of the operator with arguments. */ appendStringInfo(&buffer, _("operator %d (%s, %s) of %s: %s"), amopForm->amopstrategy, format_type_be(amopForm->amoplefttype), format_type_be(amopForm->amoprighttype), opfam.data, format_operator(amopForm->amopopr));
This might seem all right in isolation, but it produces completely horrid results as soon as you plug it into some larger message. For example, contrib_regression=# alter operator family gin__int_ops using gin drop operator 8 (integer[],integer[]); ERROR: cannot drop operator 8 (integer[], integer[]) of operator family gin__int_ops for access method gin: <@(integer[],integer[]) because operator class gin__int_ops for access method gin requires it HINT: You can drop operator class gin__int_ops for access method gin instead. The colon seems like it ought to introduce a subsidiary sentence, but it does not, and the reader is led off into the weeds trying to figure out what connects to what. I follow the point of trying to show the actual operator name, but we gotta work harder on the presentation. Perhaps this would work: appendStringInfo(&buffer, _("operator %d (%s, %s) (that is, %s) of %s"), amopForm->amopstrategy, format_type_be(amopForm->amoplefttype), format_type_be(amopForm->amoprighttype), format_operator(amopForm->amopopr), opfam.data); leading to ERROR: cannot drop operator 8 (integer[], integer[]) (that is, <@(integer[],integer[])) of operator family gin__int_ops for access method gin because operator class gin__int_ops for access method gin requires it Likewise for pg_amproc entries, of course. Or maybe we're just being too ambitious here and we should discard some of this information. I'm not really sure that the format_operator result can be included without complete loss of intelligibility. Thoughts? I'm particularly unclear on how any of this might translate into other languages, though I doubt that the current text is giving good guidance to translators. regards, tom lane