Почему я не могу изменить тип столбца в Postgres - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь изменить тип столбцов с VARCHAR на целое число.Когда я запускаю следующую команду

alter table audio_session
alter column module_type_cd type INT USING module_type_cd::integer,
alter column sound_type_cd type INT USING sound_type_cd::integer

, я получаю сообщение об ошибке:

ERROR:  invalid input syntax for integer: "string"
SQL state: 22P02

Ошибка не имеет никакого смысла.В команде нет никакой «строки».Что я сделал не так?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

В команде вообще нет "строки".

Но должно быть в данных.Команда, которую вы собираетесь использовать, пытается преобразовать все значения столбцов в целое число.Проверьте это:

select *
from audio_session
where module_type_cd = 'string' or sound_type_cd = 'string';
0 голосов
/ 07 июня 2018

Столбцы audio_session.module_type_cd или audio_session.sound_type_cd имеют по крайней мере одно нечисловое значение среди всех значений каждой строки.Таким образом, невозможно преобразовать в полностью числовой тип данных.

Например:

create table Table1( col1 varchar(10), col2 varchar(10) );
insert into Table1 values('1','1');
insert into Table1 values('2','2');
insert into Table1 values('3','C3');

select CAST(coalesce(col1, '0') AS integer) as converted from Table1; -- this works
select CAST(coalesce(col2, '0') AS integer) as converted from Table1; -- but, this doesn't

Демонстрация SQL Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...