On Wed, Sep 18, 2024 at 1:09 PM Pavel Stehule <pavel.steh...@gmail.com> wrote:
> Hi > > st 18. 9. 2024 v 9:04 odesílatel Florents Tselai < > florents.tse...@gmail.com> napsal: > >> Correct me if I'm wrong, >> but for an extension that defines composite types, >> there's currently no easy way to get a TupleDesc, even for its own types. >> >> Something like >> TupleDesc get_extension_type_tupledesc(const char *extname, const char >> *typname) >> >> Here's a routine I've stolen borrowed from pramsey's code and have been >> using ever since. >> >> Could this be exposed in extension.h ? (probably without the version >> check) >> > > I don't think this functionality is generally useful. Wrapping > TypeGetTupleDesc(typoid, NIL) is very specific, and probably this code > should be inside the extension. > > Different question is API for searching in system catalog and > dependencies. I can imagine some functions like > That's a better phrasing > > Oid extid = get_extension_id(extname); > Oid objid = get_extension_object_id(extid, schema_can_be_null, name, > TYPEOID); // can be used for routine, table, ... > > tupdesc = TypeGetTupleDesc(objid, NIL); > These are valid. For context: The "problem" (inconvenience really) I'm trying to solve is this: Most extensions define some convenient PG_GETARG_MYTYPE(n) macros. When these types are varlena, things are easy. When they're composite types though things get more verbose. i.e. the lines of code the author needs to get from a Datum argument to struct MyType are too many and multiple extensions copy-paste the same logic. My hope is we could come up with a few routines that ease and standardize this a bit. You're right that extname isn't unique, so Oid should be the argument for extension, rather than char *extname, but in my mind the "default" is "the current extension" , but no arguing about that. > > Regards > > Pavel > > >