Намерих отговора след като попитах това. По принцип има файл, наречен catalog/pg_type.h, заедно с libpq-fe.h и postgres.h. Трябва да включите след като включите libpq-fe.h и postgres.h, след което можете да получите достъп до дефинициите като TEXTOID
, BOOLOID
, INT4OID
и др.
#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
}
}
Трябва да разгледате всички OID в pg_type.h, за да имате действително обширен списък, или просто да тествате какво получавате, като правите основно SELECT 't'::boolean
тип заявки и т.н. и изградете превключвателя само когато имате нужда от нов тип, поддържащ.