2014-10-18 3 views

ответ

12
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 как id. Поэтому использование varchar здесь - плохая практика. Итак, давайте попробуем изменить тип столбца на integer.

ALTER TABLE test ALTER COLUMN id TYPE integer; 

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

ERROR: column “id” cannot be cast automatically to type integer SQL state: 42804 Hint: Specify a USING expression to perform the conversion

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

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

It Works.


Таким образом, вы должны использовать

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

Параметр 'пункт USING' только требуется, если не существует неявное присваивание не отбрасывают определены между источником и целевым типом. Подробности [здесь] (http://stackoverflow.com/questions/10343383/rails-migrations-tried-to-change-the-type-of-column-from-string-to-integer/10343444#10343444) и [здесь ] (http://stackoverflow.com/questions/21045909/generate-series-of-dates-using-date-type-as-input/21051215#21051215). –

Смежные вопросы