В PostgreSQL, как я могу определить тип составного на основе его типа Oid в C-функции? - PullRequest
0 голосов
/ 14 мая 2018

Я пишу триггер с C в PostgreSQL, который должен был бы определить, является ли тип составным или нет на основе его Oid в pg_type.

Это одна из немногих сведений, которая не включена в структуру FormData_pg_attribute.

Кто-нибудь может помочь? Большое спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Вы могли бы поступить так (не проверено):

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