Безопасно ли изменять порядок столбцов в schema.rb для Rails 4/Postgres?

Запуск Rails 4 с Postgres 9.4 в разработке и производстве. У меня есть большая таблица, которая со временем выросла за счет миграций. Из-за множества разных столбцов в таблице я хочу изменить порядок вещей, чтобы столбцы были сгруппированы более логично. Другими словами, некоторые элементы столбца естественным образом группируются вместе в зависимости от того, какую информацию они захватывают.

Я нашел обсуждение использования after: при миграции для изменения порядка столбцов (с использованием ALTER TABLE в SQL) в этом обсуждение переполнения стека. Затем я пошел дальше и настроил миграцию для этого. После запуска миграции я заметил, что мой файл schema.rb не изменился. Глядя на столбцы в базе (постгрес в разработке), там тоже ничего не изменилось.

Дальнейшие исследования привели меня к вики Postgres, в которой говорится, что в настоящее время нет поддержки изменения положения столбца. в Постгресе.

Это не критично, но облегчило бы жизнь. Мой вопрос:

  1. Если я просто перемещу строки в файле schema.rb вверх или вниз, чтобы расположить их по желанию, вызовет ли это какие-либо проблемы? Поскольку я рассчитываю предоставить любую новую базу данных с помощью rake db:schema:load, не похоже, что это должно что-то сломать. Кроме того, поскольку предыдущие миграции существенно не изменились (только порядок столбцов, которые они выводят в schema.rb), все должно быть внутренне согласовано, не так ли?

  2. Если это плохая идея, могу ли я просто вернуться к более ранним миграциям, добавить синтаксис для after: :some_column к каждому элементу столбца, чтобы они правильно настроили файл schema.rb?

Я предполагаю, что когда я перестраиваю свою производственную базу данных с нуля с исходными данными, она будет использовать структуру схемы для правильного создания таблицы в нужном порядке. Сейчас это не настоящая развернутая база данных с конечными пользователями, так что это не похоже на проблему. Использование варианта № 1 выше кажется самым простым решением, если оно ничего не ломает.


person Scro    schedule 28.07.2015    source источник


Ответы (3)


Многие люди, плохо знакомые с postgresql, часто спрашивают, поддерживает ли он изменение позиций столбцов в таблице. В настоящее время это не так; если вы хотите изменить положение столбцов, вы должны либо воссоздать таблицу, либо добавить новые столбцы и переместить данные. Идея разрешить изменение порядка расположения столбцов не является одной из идей разработчиков postgresql. напротив, это скорее случай, когда никто не взялся за работу.

ref

  • Если я просто перемещу строки в файле schema.rb вверх или вниз, чтобы расположить их по желанию, вызовет ли это какие-либо проблемы?

нет. Он ничего не делает с порядком столбцов в PG.

  • Если это плохая идея, могу ли я просто вернуться к более ранним миграциям, добавить синтаксис для after: :some_column к каждому элементу столбца, чтобы они правильно настроили файл schema.rb?

Параметр after: :some_column ничего не делает с порядком столбцов, если вы используете PG

person Зелёный    schedule 28.07.2015

Порядок ваших столбцов не имеет значения для Ruby или Rails.

Что касается того, имеет ли это значение для любого кода, который вы написали, только вы и ваши тесты можете ответить на этот вопрос. Если вы используете только ActiveRecord и не выполняете никакого прямого SQL, который ссылается на номер столбца, все должно быть в порядке.

person LanceH    schedule 28.07.2015
comment
Спасибо, Ланс. Я знаю, что порядок не имеет значения для приложения. Переупорядочивание больше для облегчения обработки моего собственного программного обеспечения. Полезно сгруппировать некоторые столбцы вместе, чтобы мне было легче увидеть, как они связаны. Не думаю, что есть способ сделать это с Postgres... - person Scro; 28.07.2015
comment
Не для существующей таблицы. Вы всегда можете создать представление для просмотра данных в определенном порядке. - person LanceH; 28.07.2015
comment
Если бы у вас была таблица t со столбцами a, b, d, c, вы могли бы сделать что-то вроде: выбрать a, b, c, d в t2 из t. Затем переименуйте t2 в t. Это если вы можете отключить текущие записи в БД. - person LanceH; 28.07.2015
comment
Я не думаю, что это ответ на вопрос ОП. Это комментарий. - person jaydel; 14.02.2017
comment
Еще одна причина, по которой нужно изменить порядок столбцов, заключается в том, что при отображении записей в консоли Rails поля выводятся в логическом порядке (например, Event.first в консоли Rails). - person Keith Bennett; 18.09.2019

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

Конечно, это, вероятно, будет перезаписано аннотацией, когда вы снова запустите ее. И это только облегчит вашу жизнь, если вы посмотрите на структуру таблицы, но это не поможет, если вы вручную запустите SQL-запросы с SELECT * в своей базе данных.

person amiuhle    schedule 28.07.2015