我问了这个问题后找到了答案。基本上,除了 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
类型查询等时返回的内容,并仅在您需要新类型支持时构建开关。