Search Postgresql Archives

postgresql-9.1.1 PQescapeByteaConn() generating incorrectly quoted output.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Since upgrading test systems to postgresql 9.1, I am seeing some inserts
to bytea fields giving errors such as "ERROR:  invalid byte sequence for
encoding "UTF8": 0xf9" Where the insert is from a C program using libpq
and is of the form "insert into xxx values(E'%s')" where the value is
the return of PQescapeByteaConn();

I noticed that with postgresql 9.0, the return string was of the form 
"\\x...." but with postgresql 9.1 it is "\x..."

I can work around this by specifying "E'\\%s" in the format string to
generate the query, but this will only work with postgrseql 9.1.

The following program illustrates the issue.


#include <stdio.h>
#include <libpq-fe.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
   PGconn *conn;
   struct
   {
	  u_int64_t byte1;
	  u_int64_t byte2;
   } bindata;

   char *enc;
   size_t elen;

   conn =  PQconnectdb("");

   bindata.byte1=0x0102030405060708;
   bindata.byte2=0x090a0b0c0d0e0f10;

   enc = PQescapeByteaConn(conn, (unsigned char *)&bindata, sizeof(bindata), &elen);

   printf("Server version %d\nEncoded string = %s\n", PQserverVersion(conn), enc);
   PQfreemem(enc);
   exit(0);
}

Running the above program with postgres 9.0 & 9.1 generates the
following output. 

graham@gmdev ~ $ ./byteatest 
Server version 90101
Encoded string = \x0807060504030201100f0e0d0c0b0a09
graham@gmdev ~ $ ./byteatest 
Server version 90005
Encoded string = \\x0807060504030201100f0e0d0c0b0a09

<<attachment: smime.p7s>>


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux