在 PostgreSQL 中,如何根据 C 函数中的类型 Oid 识别类型是复合类型?
Posted
技术标签:
【中文标题】在 PostgreSQL 中,如何根据 C 函数中的类型 Oid 识别类型是复合类型?【英文标题】:In PostgreSQL, How can I identify a type is composite based on its type Oid in C function? 【发布时间】:2018-05-14 07:42:08 【问题描述】:我正在用 PostgreSQL 中的 C 编写一个触发器,它需要根据 pg_type 中的 Oid 来识别类型是否为复合类型。
它是少数不包含在 FormData_pg_attribute 结构中的信息之一。
有人可以帮忙吗?非常感谢。
【问题讨论】:
【参考方案1】:你可以这样继续(未经测试):
#include "access/htup.h"
#include "catalog/pg_type.h"
#include "utils/syscache.h"
bool is_composite(Oid typoid)
HeapTuple tup;
Form_pg_type typtup;
bool result;
tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typoid));
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for type %u", basetypoid);
typtup = (Form_pg_type) GETSTRUCT(tup);
result = (typtup->typtype == TYPTYPE_COMPOSITE);
ReleaseSysCache(tup);
return result;
【讨论】:
以上是关于在 PostgreSQL 中,如何根据 C 函数中的类型 Oid 识别类型是复合类型?的主要内容,如果未能解决你的问题,请参考以下文章