У меня есть небольшая таблица, и определенное поле содержит тип « символ меняется ». Я пытаюсь изменить его на " Integer ", но выдает ошибку, что приведение невозможно.
Есть ли способ обойти это или я должен просто создать другую таблицу и внести записи в нее с помощью запроса.
Поле содержит только целочисленные значения.
SQL error: ERROR: column "MID" cannot be cast to type integer
SELECT
списки, не полагаясь на порядковые позиции столбцов. Тем не менее, подход, приведенный в ответах, сохранит положение столбца.Ответы:
Не существует неявного (автоматического) приведения из
text
илиvarchar
вinteger
(т. Е. Вы не можете передатьvarchar
в функцию, ожидающуюinteger
или присвоитьvarchar
полеinteger
одному), поэтому вы должны указать явное приведение, используя ALTER TABLE ... ALTER COLUMN ... TYPE. .. ИСПОЛЬЗОВАНИЕ :Обратите внимание, что у вас могут быть пробелы в ваших текстовых полях; в этом случае используйте:
убрать пустое пространство перед конвертацией.
Это должно быть очевидно из сообщения об ошибке, если команда была запущена в
psql
, но возможно, что PgAdmin-III не показывает полную ошибку. Вот что произойдет, если я протестирую егоpsql
на PostgreSQL 9.2:Спасибо @muistooshort за добавление
USING
ссылки.Смотрите также этот связанный вопрос ; речь идет о миграции Rails, но основная причина та же, и ответ применим.
Если ошибка по-прежнему возникает, то это может быть связано не со значениями столбца, но индексы для этого столбца или значения по умолчанию для столбца могут не соответствовать типу. Индексы должны быть удалены до ALTER COLUMN и воссозданы после. Значения по умолчанию должны быть изменены соответствующим образом.
источник
psql
намного быстрее и проще. Некоторое время назад я написал несколько слов о юзабилити PgAdmin в отношении резервного копирования и восстановления: blog.ringerc.id.au/2012/05/…это сработало для меня.
изменить столбец varchar на int
получил:
измененный на
источник
Вы можете сделать это как:
или попробуйте это:
Если вы хотите узнать больше об этой теме, прочитайте эту статью: https://kolosek.com/rails-change-database-column
источник
Попробуйте это, это будет работать наверняка.
При написании миграций Rails для преобразования строкового столбца в целое число вы обычно говорите:
Однако PostgreSQL будет жаловаться:
«Подсказка» в основном говорит вам, что вам нужно подтвердить, что вы хотите, чтобы это произошло, и как данные должны быть преобразованы. Просто скажите это в вашей миграции:
Вышеизложенное будет имитировать то, что вы знаете из других адаптеров базы данных. Если у вас есть нечисловые данные, результаты могут быть неожиданными (но, в конце концов, вы конвертируете в целое число).
источник
PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: ""
ошибка происходитУ меня та же проблема. Тогда я понял, что у меня есть значение по умолчанию для столбца, который я пытался изменить. Удаление значения по умолчанию сделало ошибку исчезла :)
источник
Если вы случайно или не смешали целые числа с текстовыми данными, вам сначала нужно выполнить команду обновления ниже (если не выше, то изменить таблицу не удастся):
источник
regexp_replace(col_name, '[^0-9.]','','g')
если вы пытаетесь убрать ненужных персонажей и пробелы. Вы должны были бы что - то немного более сложным , если вы хотите сохранитьNaN
иInf
и10E42
научную нотацию, хотя.Если вы работаете в среде разработки (или в производственной среде, то это может быть резервное копирование ваших данных), затем сначала удалите данные из поля БД или установите значение 0.
После этого для запуска приведенного ниже запроса и после успешного выполнения запроса к схеме-миграции и после этого запустите сценарий миграции.
Я думаю, что это поможет вам.
источник
Я была такая же проблема. Я начал сбрасывать настройки колонки по умолчанию.
источник