question about access custom enum type from C

Started by Dmitry Markmanover 3 years ago4 messages
#1Dmitry Markman
dmarkman@mac.com

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

#2David Rowley
dgrowleyml@gmail.com
In reply to: Dmitry Markman (#1)
Re: question about access custom enum type from C

(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

#3Dmitry Markman
dmarkman@mac.com
In reply to: David Rowley (#2)
Re: question about access custom enum type from C

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

Show quoted text

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

#4Dmitry Markman
dmarkman@mac.com
In reply to: David Rowley (#2)
Re: question about access custom enum type from C

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

Show quoted text

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