PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Conversão de tipo. O que faço com um valor OID do PostgreSQL na libpq em C?


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.