Andrew Dunstan <andrew.dunstan@pgexperts.com> writes:
> Yesterday I did a bit of work on allowing bytea values to be passed into
> and out of plperl in binary format, effectively removing the need to
> escape and de-escape them. (The work can be seen on he plperlargs branch
> of my development repo at
> <https://github.com/adunstan/postgresql-dev/commits/plperlargs/>).
> At the moment the behaviour is triggered by a custom setting
> (plperl.pass_binary_bytea), but this isn't really satisfactory. We could
> turn it on permanently, but that would break a lot of legacy code. What
> we really need is a way of marking a function with some attributes. Of
> course, we could put it in the program text like plpgsql's
> #variable_conflict, but that's really rather ugly. The grammar already
> has an attribute mechanism for functions, and ISTM we just need to
> extend that a bit to allow setting of function attributes reasonably
> flexibly, much as we can now specify format options on EXPLAIN or we'll
> soon be able to specify options for foreign tables.
I do not want to go there. What you're proposing will soon turn into a
real mess, with arbitrary language-specific junk tagged onto pg_proc
entries. And what's worse, it'll be mixed with non-language-specific
junk, because of the existing legacy WITH entries.
Tim Bunce seemed to think that this particular problem might be solvable
in a completely transparent way, by having byteas convert into Perl
objects that have a hook for producing a backwards-compatible text
translation. Have you looked into that idea?
regards, tom lane