method
create_enum
v8.0.0 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
create_enum(name, values, **options)public
Given a name and an array of values, creates an enum type.
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 540
def create_enum(name, values, **options)
sql_values = values.map { |s| quote(s) }.join(", ")
scope = quoted_scope(name)
query = <<~SQL
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_type t
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE t.typname = #{scope[:name]}
AND n.nspname = #{scope[:schema]}
) THEN
CREATE TYPE #{quote_table_name(name)} AS ENUM (#{sql_values});
END IF;
END
$$;
SQL
internal_exec_query(query).tap { reload_type_map }
end Related methods
- Instance methods
- active?
- add_enum_value
- build_insert_sql
- check_version
- connected?
- create_enum
- default_index_type?
- disable_extension
- discard!
- disconnect!
- drop_enum
- enable_extension
- enum_types
- extension_available?
- extension_enabled?
- extensions
- get_advisory_lock
- get_database_version
- index_algorithms
- max_identifier_length
- native_database_types
- release_advisory_lock
- reload_type_map
- rename_enum
- rename_enum_value
- reset!
- session_auth=
- set_standard_conforming_strings
- supports_advisory_locks?
- supports_bulk_alter?
- supports_check_constraints?
- supports_comments?
- supports_common_table_expressions?
- supports_datetime_with_precision?
- supports_ddl_transactions?
- supports_deferrable_constraints?
- supports_exclusion_constraints?
- supports_explain?
- supports_expression_index?
- supports_extensions?
- supports_foreign_keys?
- supports_foreign_tables?
- supports_identity_columns?
- supports_index_include?
- supports_index_sort_order?
- supports_insert_conflict_target?
- supports_insert_on_conflict?
- supports_insert_on_duplicate_skip?
- supports_insert_on_duplicate_update?
- supports_insert_returning?
- supports_json?
- supports_lazy_transactions?
- supports_materialized_views?
- supports_native_partitioning?
- supports_nulls_not_distinct?
- supports_optimizer_hints?
- supports_partial_index?
- supports_partitioned_indexes?
- supports_pgcrypto_uuid?
- supports_restart_db_transaction?
- supports_savepoints?
- supports_transaction_isolation?
- supports_unique_constraints?
- supports_validate_constraints?
- supports_views?
- supports_virtual_columns?
- use_insert_returning?
- Class methods
- create_unlogged_tables
- datetime_type
- dbconsole
- decode_dates
- initialize_type_map
- native_database_types
- new
- new_client
- Private methods
-
add_pg_decoders -
add_pg_encoders -
arel_visitor -
build_statement_pool -
can_perform_case_insensitive_comparison_for? -
column_definitions -
configure_connection -
connect -
extract_default_function -
extract_value_from_default -
get_oid_type -
has_default_function? -
in_transaction? -
initialize_type_map -
is_cached_plan_failure? -
load_additional_types -
load_types_queries -
prepare_statement -
reconfigure_connection_timezone -
reconnect -
retryable_query_error? -
sql_key -
translate_exception -
update_typemap_for_default_timezone