Подтвердить что ты не робот

Rails Migration для преобразования строки в целое с помощью преобразования

Здесь есть хороший вопрос . Я хочу подробно остановиться. Я пытаюсь преобразовать столбец в моей базе данных из строки в целое число.

Я думал, что конвертация будет довольно прямой forwrad. В настоящее время мои строки

["10", "12", "125", "135", "140", ...]

Мой файл миграции включает в себя:

def change
    change_column :table_name, :product_code, :integer
end

Rails пытается это, но Postgresql возвращает ошибку.

PG:: Ошибка: ERROR: столбец "product_code" не может быть автоматически запущен для ввода целого числа СОВЕТ. Укажите выражение USING для выполнения преобразования.

Я не уверен, как использовать это выражение "ИСПОЛЬЗОВАНИЕ" в моей миграции рельсов.

Итак, я думал, что преобразование будет довольно прямолинейным. Что следует использовать в качестве выражения USING?

4b9b3361

Ответ 2

Скорректированный код для поддержки преобразования пустых строк:

change_column :table_name, :product_code, 
  "integer USING NULLIF(product_code, '')::int"

Пустая строка становится NULL, которая становится 0 при преобразовании типов, что, вероятно, лучше всего в этой ситуации.

Ответ 3

Когда вы пишете Rails-миграции для преобразования столбца строки в целое число, которое вы обычно пишете так:

change_column :table_name, :column_name, :integer

Вы можете получить следующее:

PG::DatatypeMismatch: ERROR:  column "column_name" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion.

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

change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'