sql >> Database teknologi >  >> RDS >> PostgreSQL

Typekonvertering. Hvad gør jeg med en PostgreSQL OID-værdi i libpq i C?

Jeg fandt svaret efter at have spurgt dette. Grundlæggende er der en fil kaldet catalog/pg_type.h sammen med libpq-fe.h og postgres.h. Du skal inkludere efter at have inkluderet libpq-fe.h og postgres.h, så kan du få adgang til definitioner som TEXTOID , BOOLOID , INT4OID osv.

#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
  }
}

Du skal se på alle OID'erne i pg_type.h for faktisk at have en omfattende liste, eller bare teste, hvad du får tilbage ved at gøre grundlæggende SELECT 't'::boolean skriv forespørgsler osv. og opbyg kun switchen, da du har brug for en ny type, der understøtter.



  1. SQLite-undtagelse under forsøg på at slette række

  2. PostgreSQL tabelvariabel

  3. Postgres UNIK BEGRÆNSNING for array

  4. Hvordan udtrækkes kun datoværdi fra datofelt i Oracle?