sql >> Databasteknik >  >> RDS >> PostgreSQL

Typkonvertering. Vad gör jag med ett PostgreSQL OID-värde i libpq i C?

Jag hittade svaret efter att ha frågat detta. I grund och botten finns det en fil som heter catalog/pg_type.h, tillsammans med libpq-fe.h och postgres.h. Du måste inkludera efter att ha inkluderat libpq-fe.h och postgres.h, då kan du komma åt definitioner som 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
  }
}

Du måste titta på alla OID i pg_type.h för att faktiskt ha en omfattande lista, eller bara testa vad du får tillbaka med grundläggande SELECT 't'::boolean skriv frågor etc och bygg upp switchen endast eftersom du behöver en ny typ som stödjer.



  1. Hur man släpper bordet i oracle

  2. Schemamönstersökning till dataklassförening

  3. Bästa metoderna för att köra totaler – uppdaterad för SQL Server 2012

  4. Påverkar begränsningar av främmande nyckel frågetransformationer i Oracle?