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_opsfor 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