diff --git a/config/initializers/zz_patch_activerecord_type_loading.rb b/config/initializers/zz_patch_activerecord_type_loading.rb new file mode 100644 index 000000000000..0f45002bb10d --- /dev/null +++ b/config/initializers/zz_patch_activerecord_type_loading.rb @@ -0,0 +1,23 @@ +module ActiveRecord + module ConnectionAdapters + module PostgreSQL + module OID # :nodoc: + class TypeMapInitializer # :nodoc: + def query_conditions_for_initial_load(type_map) + known_type_names = type_map.keys.map { |n| "'#{n}'" } + known_type_types = %w('r' 'e' 'd') + <<-SQL % [known_type_names.join(", "), known_type_types.join(", ")] + LEFT JOIN pg_type as tt ON (tt.typtype = 'c' AND tt.typarray = t.oid AND tt.typinput = 'record_in(cstring,oid,integer)'::regprocedure) + WHERE + tt.oid is null + AND (t.typname IN (%s) + OR t.typtype IN (%s) + OR t.typinput = 'array_in(cstring,oid,integer)'::regprocedure + OR t.typelem != 0) + SQL + end + end + end + end + end +end