sql >> Database >  >> RDS >> PostgreSQL

Typ conversie. Wat moet ik doen met een PostgreSQL OID-waarde in libpq in C?

Ik vond het antwoord nadat ik dit had gevraagd. In principe is er een bestand met de naam catalog/pg_type.h, naast libpq-fe.h en postgres.h. Je moet opnemen nadat je libpq-fe.h en postgres.h hebt toegevoegd, dan heb je toegang tot de definities zoals TEXTOID , BOOLOID , INT4OID enz.

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

Je moet naar alle OID's in pg_type.h kijken om een ​​uitgebreide lijst te hebben, of gewoon testen wat je terugkrijgt door basis SELECT 't'::boolean te doen typ queries etc en bouw de switch alleen op als je een nieuw type nodig hebt dat ondersteunt.



  1. Hoe NIET RLIKE werkt in MariaDB

  2. Sommige ELKE geaggregeerde transformaties zijn verbroken

  3. Wanneer moet ik een puntkomma versus een schuine streep gebruiken in Oracle SQL?

  4. Programmatisch een database maken in SQL Server