Thread: question about access custom enum type from C

question about access custom enum type from C

From
Dmitry Markman
Date:
Hi, when I’m trying to access values of my custom enum type I created with

create type colors as enum ('red', 'green', 'brown', 'yellow', 'blue');

I’m getting oid as 16387 and I can see it stored as a chars

is number 16387 is always OID for enum type?

if not how I can get information about type of the result if it’s custom enum type

thanks in advance

dm




Re: question about access custom enum type from C

From
David Rowley
Date:
(I think this is a better question for the general mailing list)

On Thu, 1 Sept 2022 at 16:28, Dmitry Markman <dmarkman@mac.com> wrote:
>
> Hi, when I’m trying to access values of my custom enum type I created with
>
> create type colors as enum ('red', 'green', 'brown', 'yellow', 'blue');
>
> I’m getting oid as 16387 and I can see it stored as a chars

You might see the names if you query the table, but all that's stored
in the table is the numerical value.

https://www.postgresql.org/docs/current/datatype-enum.html states "An
enum value occupies four bytes on disk.".

> is number 16387 is always OID for enum type?

I'm not sure where you got that number from. Perhaps it's the oid for
the pg_type record? The following would show it.

select oid,typname from pg_type where typname = 'colors';

> if not how I can get information about type of the result if it’s custom enum type

I'm not sure what you mean by "the result".  Maybe pg_typeof(column)
might be what you want? You can do: SELECT pg_typeof(myenumcol) FROM
mytable;

David



Re: question about access custom enum type from C

From
Dmitry Markman
Date:
Hi David, thanks a lot for your answer

I got that number from

PQparamtype

I already see that 16387 is not a ‘constant’, if I have few custom types I got different numbers for them

thanks

dm



On Sep 1, 2022, at 12:49 AM, David Rowley <dgrowleyml@gmail.com> wrote:

(I think this is a better question for the general mailing list)

On Thu, 1 Sept 2022 at 16:28, Dmitry Markman <dmarkman@mac.com> wrote:

Hi, when I’m trying to access values of my custom enum type I created with

create type colors as enum ('red', 'green', 'brown', 'yellow', 'blue');

I’m getting oid as 16387 and I can see it stored as a chars

You might see the names if you query the table, but all that's stored
in the table is the numerical value.

https://www.postgresql.org/docs/current/datatype-enum.html states "An
enum value occupies four bytes on disk.".

is number 16387 is always OID for enum type?

I'm not sure where you got that number from. Perhaps it's the oid for
the pg_type record? The following would show it.

select oid,typname from pg_type where typname = 'colors';

if not how I can get information about type of the result if it’s custom enum type

I'm not sure what you mean by "the result".  Maybe pg_typeof(column)
might be what you want? You can do: SELECT pg_typeof(myenumcol) FROM
mytable;

David

Re: question about access custom enum type from C

From
Dmitry Markman
Date:
Hi David

as you suggested

create type first_type as enum ('red', 'green', 'brown', 'yellow', 'blue');
SELECT oid,typname,typlen,typtype from pg_type where typname='first_type'

returns everything I was looking for

thanks again, I think I’m all set

dm


> On Sep 1, 2022, at 12:49 AM, David Rowley <dgrowleyml@gmail.com> wrote:
>
> (I think this is a better question for the general mailing list)
>
> On Thu, 1 Sept 2022 at 16:28, Dmitry Markman <dmarkman@mac.com> wrote:
>>
>> Hi, when I’m trying to access values of my custom enum type I created with
>>
>> create type colors as enum ('red', 'green', 'brown', 'yellow', 'blue');
>>
>> I’m getting oid as 16387 and I can see it stored as a chars
>
> You might see the names if you query the table, but all that's stored
> in the table is the numerical value.
>
> https://www.postgresql.org/docs/current/datatype-enum.html states "An
> enum value occupies four bytes on disk.".
>
>> is number 16387 is always OID for enum type?
>
> I'm not sure where you got that number from. Perhaps it's the oid for
> the pg_type record? The following would show it.
>
> select oid,typname from pg_type where typname = 'colors';
>
>> if not how I can get information about type of the result if it’s custom enum type
>
> I'm not sure what you mean by "the result".  Maybe pg_typeof(column)
> might be what you want? You can do: SELECT pg_typeof(myenumcol) FROM
> mytable;
>
> David