Postgresql 9,6 с мульти-арендой - INHERIT говорит, что у дочерней таблицы есть столбец с другим типом данных, но это не так - PullRequest
0 голосов
/ 09 января 2020

Я работал с унаследованным приложением 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" #...

Хорошо, так что ... кто-нибудь знает, как Я мог бы выяснить, почему таблица дочерней схемы имеет немного другой тип?

Я не могу найти, что есть какая-либо миграция для настройки типа / длины столбца, и код создания арендатора просто запускает метод создания арендатора квартиры. с именем арендатора.

1 Ответ

0 голосов
/ 11 января 2020

В этом была моя ошибка, и в результате проблемы со схемой квартиры оказались немного красной селедкой: https://github.com/influitive/apartment/issues/626#issuecomment -573206304

...