I have been chasing Domingo Alvarez Duarte's report of funny behavior
when assigning an empty string to a "char" variable in plpgsql. What
it comes down to is that text-to-char conversion does not behave very
well for zero-length input. charin() returns a null character, leading
to the following bizarreness:
regression=# select 'z' || (''::"char") || 'q';
?column?
----------
z
(1 row)
regression=# select length('z' || (''::"char") || 'q');
length
--------
3
(1 row)
The concatenation result is 'z\0q', which doesn't print nicely :-(.
text_char() produces a completely random result, eg:
regression=# select ''::text::"char";
?column?
----------
~
(1 row)
and could even coredump in the worst case, since it tries to fetch the
first character of the text input no matter whether there is one or not.
I propose that both of these operations should return a space character
for an empty input string. This is by analogy to space-padding as you'd
get with char(1). Any objections?
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster