Вы можете попробовать использовать USING
:
Необязательное предложение USING
указывает, как вычислить новое значение столбца из старого;если опущено, преобразование по умолчанию такое же, как и при преобразовании из старого типа данных в новый.Предложение USING
должно быть предоставлено, если нет неявного или приведения, приведенного от старого к новому типу.
Так что это может работать (в зависимости от ваших данных):
alter table presales alter column code type numeric(10,0) using code::numeric;
-- Or if you prefer standard casting...
alter table presales alter column code type numeric(10,0) using cast(code as numeric);
Это не удастся, если у вас есть что-то в code
, которое не может быть преобразовано в числовое значение;в случае сбоя ИСПОЛЬЗОВАНИЯ вам придется вручную очистить нечисловые данные перед изменением типа столбца.