Encontrei a resposta depois de perguntar isso. Basicamente existe um arquivo chamado catalog/pg_type.h, junto com libpq-fe.h e postgres.h. Você precisa incluir depois de incluir libpq-fe.h e postgres.h, então você pode acessar as definições como
TEXTOID
, BOOLOID
, INT4OID
etc. #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
}
}
Você precisa olhar para todos os OIDs em pg_type.h para realmente ter uma lista extensa, ou apenas testar o que você volta fazendo básico
SELECT 't'::boolean
digite consultas etc e construa o switch apenas quando precisar de um novo tipo de suporte.