If PQfn() receives NOTICEs from the backend, it fails because there is no
provision to deal with them.
This patch (supplied by Anders Hammarquist <iko@netg.se> to me as Debian
maintainer of postgresql) cures the problem:
diff -cr postgresql-6.3.2.orig/src/interfaces/libpq/fe-exec.c
postgresql-6.3.2/src/interfaces/libpq/fe-exec.c
*** postgresql-6.3.2.orig/src/interfaces/libpq/fe-exec.c Mon Mar 16 08:0
0:26
1998
- --- postgresql-6.3.2/src/interfaces/libpq/fe-exec.c Tue Apr 28 06:47:22 199
8
***************
*** 1545,1556 ****
}
pqFlush(pfout, pfdebug);
! id = pqGetc(pfin, pfdebug);
! if (id != 'V')
{
if (id == 'E')
{
pqGets(conn->errorMessage, ERROR_MSG_LENGTH, pfin, pfde
bug);
}
else
sprintf(conn->errorMessage,
- --- 1545,1570 ----
}
pqFlush(pfout, pfdebug);
! while ((id = pqGetc(pfin, pfdebug)) != 'V')
{
if (id == 'E')
{
pqGets(conn->errorMessage, ERROR_MSG_LENGTH, pfin, pfde
bug);
+ }
+ else if (id == 'N')
+ {
+ /* print notice and go back to processing return
+ values */
+ if (pqGets(conn->errorMessage, ERROR_MSG_LENGTH,
+ pfin, pfdebug) == 1)
+ {
+ sprintf(conn->errorMessage,
+ "Notice return detected from backend, but "
+ "message cannot be read");
+ }
+ else
+ fprintf(stderr, "%s\n", conn->errorMessage);
+ continue;
}
else
sprintf(conn->errorMessage,
--
Oliver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight http://www.lfix.co.uk/oliver
PGP key from public servers; key ID 32B8FAA1
========================================
Come to me, all you who labour and are heavily laden, and I will
give you rest. Take my yoke upon you, and learn from me; for I am
meek and lowly in heart, and you shall find rest for your souls.
For my yoke is easy and my burden is light. (Matthew 11: 28-30)