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

Digita la conversione. Cosa devo fare con un valore OID PostgreSQL in libpq in C?

Ho trovato la risposta dopo aver chiesto questo. Fondamentalmente c'è un file chiamato catalog/pg_type.h, insieme a libpq-fe.h e postgres.h. Devi includere dopo aver incluso libpq-fe.h e postgres.h, quindi puoi accedere a definizioni come TEXTOID , BOOLOID , INT4OID ecc.

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

Devi guardare tutti gli OID in pg_type.h per avere effettivamente un elenco completo, o semplicemente testare ciò che ottieni facendo di base SELECT 't'::boolean digita query ecc. e crea lo switch solo perché hai bisogno di un nuovo tipo di supporto.