Ik vond het antwoord nadat ik dit had gevraagd. In principe is er een bestand met de naam catalog/pg_type.h, naast libpq-fe.h en postgres.h. Je moet opnemen nadat je libpq-fe.h en postgres.h hebt toegevoegd, dan heb je toegang tot de definities zoals TEXTOID
, BOOLOID
, INT4OID
enz.
#include <stdio.h>
#include <postgres.h>
#include <libpq-fe.h>
#include <catalog/pg_type.h>
// ... snip ...
if (PQgetisnull(result, row, col)) {
// value is NULL, nothing more to do
} else {
char * value = PQgetvalue(result, row, col);
int length = PQgetlength(result, row, col);
switch (PQftype(result, col)) {
case INT2OID:
case INT4OID:
case INT8OID:
// process value as an integer
break;
default:
// just default to a text representation
}
}
Je moet naar alle OID's in pg_type.h kijken om een uitgebreide lijst te hebben, of gewoon testen wat je terugkrijgt door basis SELECT 't'::boolean
te doen typ queries etc en bouw de switch alleen op als je een nieuw type nodig hebt dat ondersteunt.