Обсуждение: C function argument types
Hello
How can I determine the pg_class oid of the argument type in a
polymorphic C function when it's called with a table row?
PG_FUNCTION_INFO_V1(myfunc);
Datum myfunc(PG_FUNCTION_ARGS)
{Oid arg_type = get_fn_expr_argtype(fcinfo->flinfo, 0);elog(ERROR, "arg_type %d", arg_type);PG_RETURN_NULL();
}
select myfunc(mytable) from mytable;
arg_type 65754
select 'mytable'::regclass::oid
65752
I expected them to be equal.
What gives?
For other table the results are 65783 vs 65785.
I'm running v 8.4.3
Thanks,
Bogdan
Bogdan Vlad <bogdancvlad@gmail.com> writes:
> How can I determine the pg_class oid of the argument type in a
> polymorphic C function when it's called with a table row?
You're confusing pg_class oid with pg_type oid. The type oid
of the function argument is necessarily going to be a *type* oid.
You can look at the pg_type row to find the associated pg_class oid,
if it's a composite type (it might not be!)
regards, tom lane