에서 암시 (자동) 주조 없습니다 text
또는 varchar
으로는 integer
(A를 전달할 수 없습니다 당신을 즉, varchar
기대 함수에 integer
또는 지정 varchar
에 필드를 integer
사용 명시 적 캐스트 지정해야하므로, 하나) ALTER TABLE ... ALTER COLUMN에 ... TYPE을. .. 사용 :
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);
텍스트 필드에 공백이있을 수 있습니다. 이 경우 다음을 사용하십시오.
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);
변환하기 전에 공백을 제거합니다.
이 명령은에서 명령을 실행 한 경우 오류 메시지에서 분명 psql
하지만 PgAdmin-III이 전체 오류를 표시하지 않을 수 있습니다. psql
PostgreSQL 9.2 에서 테스트하면 어떻게됩니까?
=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'), (' 42 ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR: column "x" cannot be cast automatically to type integer
HINT: Specify a USING expression to perform the conversion.
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE
USING
링크 를 추가해 주셔서 감사합니다 @muistooshort .
이 관련 질문 도 참조하십시오 . Rails 마이그레이션에 관한 것이지만 근본 원인은 동일하며 답변이 적용됩니다.
오류가 계속 발생하면 열 값과 관련이 없지만이 열 또는 열 기본값에 대한 인덱스는 유형 변환에 실패 할 수 있습니다. ALTER COLUMN 전에 인덱스를 삭제 한 후 다시 작성해야합니다. 기본값은 적절히 변경해야합니다.