Simon,
My reply is pretty late, maybe you've already find out on your own.
Here is what I can show you
...
struct measurestation {int Id ;char Name[NAMELEN] ;char ProviderName[NAMELEN] ;char ProviderTime[15] ;float Longitude
;floatLatitude ;int Height ;int nValue ;float Value ;int MeasureHght ;struct measurestation* next ;
} ;
typedef struct measurestation MeasureValues ;
... char CmdLine[1024]; PGconn *conn; PGresult *res;
MeasureValues mval ; char ByteaString[1024]; size_t binarylen;
/* insert a C struct as bytea type */ memset ( &mval , 0 , sizeof(MeasureValues) ) ; strcpy ( mval.Name ,
"stat-name") ; strcpy ( mval.ProviderName , "prov-name" ) ;
/*
keep in mind libpq is not thread-safe,
so what I use as buffer 'ByteaString' should be 4 times the
sizeof(MeasureValues)
to be on the safe side (all non-printables bytes become four byte octets
\nnn)
*/ strcpy ( ByteaString , (const char *) PQescapeBytea((unsigned char *) &mval ,
sizeof(MeasureValues),
&binarylen)); sprintf(CmdLine, "INSERT INTO bytea_tab ( bytea_col ) VALUES
('%s');", ByteaString); res = PQexec(conn, CmdLine); if (!res || PQresultStatus(res) !=
PGRES_COMMAND_OK) { fprintf(stderr, "INSERT command failed\n"); PQclear(res); exit_nicely(conn);
}
This works for me.
Regards, Christoph