Method: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#create_enum

Defined in:
lib/active_record/connection_adapters/postgresql_adapter.rb

#create_enum(name, values) ⇒ Object

Given a name and an array of values, creates an enum type.



472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
# File 'lib/active_record/connection_adapters/postgresql_adapter.rb', line 472

def create_enum(name, values)
  sql_values = values.map { |s| "'#{s}'" }.join(", ")
  query = <<~SQL
    DO $$
    BEGIN
        IF NOT EXISTS (
          SELECT 1 FROM pg_type t
          WHERE t.typname = '#{name}'
        ) THEN
            CREATE TYPE \"#{name}\" AS ENUM (#{sql_values});
        END IF;
    END
    $$;
  SQL
  exec_query(query)
end