J'ai trouvé la réponse après avoir posé cette question. Fondamentalement, il existe un fichier appelé catalog/pg_type.h, aux côtés de libpq-fe.h et postgres.h. Vous devez inclure après avoir inclus libpq-fe.h et postgres.h, puis vous pouvez accéder aux définitions comme 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
}
}
Vous devez regarder tous les OID dans pg_type.h pour avoir une liste complète, ou simplement tester ce que vous obtenez en faisant de base SELECT 't'::boolean
tapez des requêtes, etc. et créez le commutateur uniquement si vous avez besoin d'un nouveau type de prise en charge.