2016-12-19 1 views
-1

В моих Rails structure.sql, у меня есть эта строка кода:Удаление базы данных уникальный индекс ограничения в Postgres Rails

CREATE UNIQUE INDEX primary_active_fruit_in_season_constraint ON trees USING btree (user_id) WHERE (is_ripe AND is_in_season);

я больше не нужна эта проверка, так что я иду, чтобы удалить проверки в Rails код на модели Tree. Но как удалить эту проверку базы данных? Откуда это? Какая строка кода в миграции рельсов создала это? Как его удалить?

ответ

0

У нас нет возможности узнать, кто создал этот индекс, но и условие WHERE прикрепленный к нему предполагает (с AR вообще не знает о таких передовых вещах), что он был создан вручную с чем-то вроде:

connection.execute('create unique index ...') 

и вы можете удалить индекс в миграции таким же образом:

def up 
    connection.execute('drop index primary_active_fruit_in_season') 
end 
def down 
    connection.execute('CREATE UNIQUE INDEX primary_active_fruit_in_season_constraint ON trees USING btree (user_id) WHERE (is_ripe AND is_in_season)') 
end 

вручную создать миграционную файл с этими двумя методами в нем и rake db:migrate как обычно.

+0

А я вижу ... Я должен использовать 'connection.execute' здесь. Итак, это индекс базы данных с уникальностью? Это не проверка подлинности на основе кода? – Jwan622

+0

Все в 'structure.sql' находится внутри базы данных. Уникальные ограничения и уникальные индексы более или менее одинаковы. Предложение WHERE в индексе - это то, что ActiveRecord не поймет, возможно, именно поэтому вы используете 'struct.sql' вместо' schema.rb'. –

Смежные вопросы