これを聞いて答えを見つけました。基本的に、libpq-fe.hとpostgres.hの横に、catalog/pg_type.hというファイルがあります。 libpq-fe.hとpostgres.hをインクルードした後にインクルードする必要があります。そうすれば、TEXTOID
のような定義にアクセスできます。 、BOOLOID
、INT4OID
など
#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
}
}
実際に広範なリストを作成するには、pg_type.h内のすべてのOIDを確認するか、基本的なSELECT 't'::boolean
を実行して何が返されるかをテストする必要があります。 クエリなどを入力し、サポートする新しいタイプが必要な場合にのみスイッチを構築します。