PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Typumwandlung. Was mache ich mit einem PostgreSQL-OID-Wert in libpq in C?

Ich fand die Antwort, nachdem ich dies gefragt hatte. Grundsätzlich gibt es neben libpq-fe.h und postgres.h eine Datei namens catalog/pg_type.h. Sie müssen nach dem Einbinden von libpq-fe.h und postgres.h einbinden, dann können Sie auf die Definitionen wie TEXTOID zugreifen , BOOLOID , INT4OID usw.

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

Sie müssen sich alle OIDs in pg_type.h ansehen, um tatsächlich eine umfangreiche Liste zu haben, oder einfach testen, was Sie zurückbekommen, wenn Sie das grundlegende SELECT 't'::boolean ausführen Typabfragen usw. und bauen Sie den Schalter nur auf, wenn Sie einen neuen Typ unterstützen müssen.