Is there a way to define an enum using a table’s column names?
I have a users table defined as follows:
create table public.users ( "id" serial not null unique primary key, "name" text not null check(length(name) > 1), "photo" text, "phone" text not null unique, "email" text not null unique, "bio" text, "socials" social[] not null );
And then I want to define a required_profile_fields column in another table to be an enum containing only the column names in that public.users table:
create type profile_fields as enum('name', 'photo', 'email', 'phone');
create table public.orgs (
"required_profile_fields" profile_fields[] not null check(array_length(required_profile_fields) > 0)
);
Is there a way that I can define that profile_fields as an enum from the column names in public.users?
Advertisement
Answer
You can try something like this:
DO
$$
BEGIN
EXECUTE (
SELECT
format('CREATE TYPE profile_fields AS ENUM (%s)',
string_agg( DISTINCT quote_literal(column_name), ', ') )
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'users'
);
END
$$