Я работал с унаследованным приложением rails, у которого была та же самая «наследуемая» миграция, которая много раз выполнялась в прошлом, но внезапно жалуется, что в одной из дочерних таблиц есть столбец другого типа, чем родительский таблица в схеме publi c, но когда я проверяю вещи в базе данных, это не так. См. Примеры кода ниже
Ошибка
Apartment::Tenant.switch("child_schema")
# local variable assigned in a looping array of table names...
table = "categories"
ActiveRecord::Base.connection.execute("ALTER TABLE #{table} INHERIT public.#{table}")
-- ERROR:
ActiveRecord::StatementInvalid: PG::DatatypeMismatch: ERROR: child table "categories" has different type for column "name"
: ALTER TABLE categories INHERIT public.categories
from /var/bundle/ruby/2.3.0/gems/activerecord-4.2.11.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
Инспекция
> ActiveRecord::Base.connection.execute("select column_name,data_type from information_schema.columns where table_schema = 'child_schema' AND table_name = 'categories';").to_a
=> [{"column_name"=>"id", "data_type"=>"integer"}, {"column_name"=>"name", "data_type"=>"character varying"}]
> ActiveRecord::Base.connection.execute("select column_name,data_type from information_schema.columns where table_schema = 'public' AND table_name = 'categories';").to_a
=> [{"column_name"=>"id", "data_type"=>"integer"}, {"column_name"=>"name", "data_type"=>"character varying"}]
Я действительно в недоумении что делать, я пытался найти в Google и SO, просматривая postgresql INHERIT документы, копаясь в поисках рельсов / квартир, и не могу найти никакой информации.
Обновление
Похоже, если я сделаю это:
> Category.connection.columns('public.categories')
> Category.connection.columns('child_schema.categories')
Теперь я получаю разницу в типах столбцов:
# Public parent table:
=> [#<ActiveRecord::ConnectionAdapters::PostgreSQLColumn: #...
@name="name", #...
@sql_type="character varying(255)" #...
# child_schema child table:
=> [#<ActiveRecord::ConnectionAdapters::PostgreSQLColumn: #...
@name="name", #...
@sql_type="character varying" #...
Хорошо, так что ... кто-нибудь знает, как Я мог бы выяснить, почему таблица дочерней схемы имеет немного другой тип?
Я не могу найти, что есть какая-либо миграция для настройки типа / длины столбца, и код создания арендатора просто запускает метод создания арендатора квартиры. с именем арендатора.