PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Conversion de types. Que dois-je faire avec une valeur d'OID PostgreSQL dans libpq en C ?

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.