Измените тип данных столбца с Text на Integer в PostgreSQL [дубликат]

этот вопрос уже есть ответ здесь:

Я использую следующий запрос для изменения типа данных столбца от text до integer, но получаю ошибку:

 alter table a.attend alter column terminal TYPE INTEGER ;

ошибка: столбец " терминал" невозможно автоматически привести к типу integer

1 ответов


create table test(id varchar );
insert into test values('1');
insert into test values('11');
insert into test values('12');

select * from test

 --Result--
 id
 character varying
--------------------------
 1
 11
 12

вы можете видеть из приведенной выше таблицы, которые я использовал тип данных – character varying на id колонна. Но это была ошибка, потому что я всегда даю integers as id. Итак, используя varchar вот плохая практика. Поэтому давайте попробуем изменить тип столбца на integer.

ALTER TABLE test ALTER COLUMN id TYPE integer;

но он возвращает:

ошибка: столбец "id" не может быть автоматически приведен к типу integer SQL состояние: 42804 подсказка: укажите выражение USING для выполнения преобразование

это значит, что мы не можем просто изменить тип данных, потому что данные уже есть в столбце. Поскольку данные имеют тип character varying Postgres не может ожидать его как целое, хотя мы ввели только целые числа. Итак, теперь, как предложил Postgres, мы можем использовать USING выражение для приведения наших данных в целые числа.

ALTER TABLE test ALTER COLUMN id  TYPE integer USING (id::integer);

Это Работает.


поэтому вы должны использовать

alter table a.attend alter column terminal TYPE INTEGER  USING (terminal::integer) ;