Thread: SRF question
Hi everyone.
I need to create a C function that returns a row, and the type of this row must be the same of a type that I've created using CREATE TYPE.
I've seen the function:
TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases)
but I don't understand two things:
1)I just know the name of the type, not its oid... woud it be ok if I execute a SELECT on pg_type asking for typname to find the oid of the type I want to return? or is there any function like RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call passing just the typename as a char *?
2)in case TypeGetTupleDesc is the only option, what is the second argument?
Thanks in advance.
PS: sorry if you receive this message twice, I sent it on saturday but it seems it never arrived :)
I need to create a C function that returns a row, and the type of this row must be the same of a type that I've created using CREATE TYPE.
I've seen the function:
TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases)
but I don't understand two things:
1)I just know the name of the type, not its oid... woud it be ok if I execute a SELECT on pg_type asking for typname to find the oid of the type I want to return? or is there any function like RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call passing just the typename as a char *?
2)in case TypeGetTupleDesc is the only option, what is the second argument?
Thanks in advance.
PS: sorry if you receive this message twice, I sent it on saturday but it seems it never arrived :)
Attachment
Franco Bruno Borghesi <franco@akyasociados.com.ar> writes: > 1)I just know the name of the type, not its oid... woud it be ok if I > execute a SELECT on pg_type asking for typname to find the oid of the > type I want to return? or is there any function like > RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call > passing just the typename as a char *? A SELECT seems like the hard way. Look into parse_type.c for some routines that might help. Offhand parseTypeString() is probably your best bet. > 2)in case TypeGetTupleDesc is the only option, what is the second > argument? I believe you can just set it to NIL, since you are only interested in composite types. regards, tom lane
yes, parseTypeString() seems to be the way.
I've found parseTypeString() in plpgsql.so... would it be ok to call dlopen('plpgsql.so', ...) from my C code to access this function or is there some other method I sould use?
thanks tom.
On Mon, 2003-09-08 at 12:02, Tom Lane wrote:
I've found parseTypeString() in plpgsql.so... would it be ok to call dlopen('plpgsql.so', ...) from my C code to access this function or is there some other method I sould use?
thanks tom.
On Mon, 2003-09-08 at 12:02, Tom Lane wrote:
Franco Bruno Borghesi <franco@akyasociados.com.ar> writes: > 1)I just know the name of the type, not its oid... woud it be ok if I > execute a SELECT on pg_type asking for typname to find the oid of the > type I want to return? or is there any function like > RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call > passing just the typename as a char *? A SELECT seems like the hard way. Look into parse_type.c for some routines that might help. Offhand parseTypeString() is probably your best bet. > 2)in case TypeGetTupleDesc is the only option, what is the second > argument? I believe you can just set it to NIL, since you are only interested in composite types. regards, tom lane
Attachment
Franco Bruno Borghesi <franco@akyasociados.com.ar> writes: > I've found parseTypeString() in plpgsql.so... would it be ok to call > dlopen('plpgsql.so', ...) from my C code to access this function Why would you need to do that!??! It's in the main executable. regards, tom lane