"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> writes:
> Actually, this does work, just not the way one would immediately expect.
On closer inspection, what's actually happening in your example is that
you're getting the SELECT's ct1 result crammed into the first column of
c1, and then a default NULL is stuck into its second column:
> ct1: (text, text)
> DO $$
> SELECT ('1', '2')::ct1 INTO c1;
> RAISE NOTICE '%', c1;
> END;
> $$;
> Notice: ("(1,2)",)
Notice the parens/comma positioning. It's only because text is such
a lax datatype that you didn't notice the problem.
regards, tom lane