Re: PQescapeBytea is not multibyte aware - Mailing list pgsql-hackers

From Tom Lane
Subject Re: PQescapeBytea is not multibyte aware
Date
Msg-id 24708.1018024355@sss.pgh.pa.us
Whole thread Raw
In response to Re: PQescapeBytea is not multibyte aware  (Joe Conway <mail@joeconway.com>)
List pgsql-hackers
Joe Conway <mail@joeconway.com> writes:
> But the error comes from pg_verifymbstr. Since bytea has no encoding 
> (it's just an array of bytes afterall), why does pg_verifymbstr get 
> applied at all to bytea data?

Because textin() is used for the initial conversion to an "unknown"
constant --- see make_const() in parse_node.c.

> pg_verifymbstr is called by textin, bpcharin, and varcharin. Would it 
> help to rewrite this as:

> INSERT INTO t1(bytea_col) VALUES('characters produced by
> PQescapebytea'::bytea);

Probably that would cause the error to disappear, but it's hardly a
desirable answer.

I wonder whether this says that TEXT is not a good implementation of
type UNKNOWN.  That choice was made on the assumption that TEXT would
faithfully preserve the contents of a C string ... but it seems that in
the multibyte world it ain't so.  It would not be a huge amount of work
to write a couple more I/O routines and give UNKNOWN its own I/O
behavior.

OTOH, I was surprised to read your message because I had assumed the
damage was being done much further upstream, viz during collection of
the query string by pq_getstr().  Do we need to think twice about that
processing, as well?
        regards, tom lane


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: timeout implementation issues
Next
From: Fernando Nasser
Date:
Subject: Re: What's the CURRENT schema ?