I wrote:
> close(2);
> d = dup(p[0]);
> Assert(d == 2);
Having re-read the pipe(2) man page, of course that should be
d = dup(p[1]);
since it's the writing end of the pipe you want to plug stderr into.
BTW, if it wasn't clear: I'd do the same pushup for stdout too,
just in case. I'm not sure there is any output to stdout left in the
backend, but I wouldn't swear there is not, either.
regards, tom lane