Обсуждение: Determining the OID of a certain type
Hi *,
I wanted to ask, if there is a method to determine the oid of a certain type using the C backend interface? I need to
getaccess to a specific type for an IAM and therefore i want to construct an IndexTuple using the specified methods.
However,I need the OID of the specific type for it. I considered writing some auxiliary function that returns the OID
ofthe type using plpgsql. This works fine. However, I thought about something that I can use directly in C (server
side)to get the oid, or do I have to set up a query to the database? Querying is currently the way I go here. However,
itdoes not feel so right, to return the OID for the type I want to use, using a query. I hope, that there is some
predefinedfunction that I haven't found yet to determine the OID of some type (or relation etc).
Best regards,
Carsten Kropf
Carsten Kropf <ckropf2@fh-hof.de> writes:
> I wanted to ask, if there is a method to determine the oid of a
> certain type using the C backend interface?
Starting from what?
For built-in types it's usual practice to use the #define from
pg_type.h, if there is one. If you have a string name for the type,
there's a parser function to derive an OID, which I forget the name
of but it's probably in parse_type.c.
regards, tom lane
Thanks a lot,
basically I looked inside these functions in parse_type.c and did not find an "easy to use" application here. So I considered trying to construct the required arguments passed to typenameType. However, during the development, I found the following function:
Oid
TypenameGetTypid(const char *typname)
which does indeed do the lookup of my particular type in the cache and system catalog tables. Thanks a lot for the hint!
Best regards
Carsten Kropf
Am 22.03.2010 um 13:18 schrieb Tom Lane:
Carsten Kropf <ckropf2@fh-hof.de> writes:I wanted to ask, if there is a method to determine the oid of acertain type using the C backend interface?
Starting from what?
For built-in types it's usual practice to use the #define from
pg_type.h, if there is one. If you have a string name for the type,
there's a parser function to derive an OID, which I forget the name
of but it's probably in parse_type.c.
regards, tom lane
--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Carsten Kropf <ckropf2@fh-hof.de> writes:
> basically I looked inside these functions in parse_type.c and did not find an "easy to use" application here. So I
consideredtrying to construct the required arguments passed to typenameType. However, during the development, I found
thefollowing function:
> Oid
> TypenameGetTypid(const char *typname)
> which does indeed do the lookup of my particular type in the cache and system catalog tables. Thanks a lot for the
hint!
Actually, parseTypeString() is what I was thinking of. TypenameGetTypid
won't cope with schema-qualified names, nor a lot of other cases.
regards, tom lane
Oh, thanks, that's right, I see that this function I used before, searches only in the currently used schema. The usage
ofparseTypeString is comparable easy, as well, so based on your hints, I will probably use this function.
Best regards
Carsten Kropf
Am 22.03.2010 um 16:23 schrieb Tom Lane:
> Carsten Kropf <ckropf2@fh-hof.de> writes:
>> basically I looked inside these functions in parse_type.c and did not find an "easy to use" application here. So I
consideredtrying to construct the required arguments passed to typenameType. However, during the development, I found
thefollowing function:
>> Oid
>> TypenameGetTypid(const char *typname)
>> which does indeed do the lookup of my particular type in the cache and system catalog tables. Thanks a lot for the
hint!
>
> Actually, parseTypeString() is what I was thinking of. TypenameGetTypid
> won't cope with schema-qualified names, nor a lot of other cases.
>
> regards, tom lane
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general