에러해결(Error) PostgresSQL의 컬럼 string을 데이터 초기화 없이 integer로 변경
안녕하세요. 알렉스 입니다. 이번에 업무를 보다가 해결한 문제를 블로그 글로 작성할려고 합니다. 예전에 가격을 'VARCHAR'로 지정해서 그것을 모두 'Integer'로 변경해야 했습니다. 그런데 이때 데이터의 변환 없이 그대로 바꿔야 했죠.
입력되어있는 데이터는 모두 숫자로 구성된 문자로 단순히 문자를 숫자로 변환해주면 되는 것이였습니다.
사진1) payment table |
현재 테이블에서 gamePrice가 있는데 종류가 'character varying'으로 되어있습니다. 즉 'VARCHAR'로 되어 있는 것입니다.
사진2) 2개의 record |
사진2에서 2개의 레코드가 DB에 저장된 것을 알수 있습니다. 이제 보통 column의 속성을 바꿀때 쓰는 sql문을 사용해 보겠습니다.
1. Table의 column속성을 변경하기
- 해당 컬럼속성을 변경합니다. 아래는 VARCHAR속성에서 INTEGER로 변경하는 것입니다.
ALTER TABLE payment ALTER COLUMN "gamePrice" TYPE integer;
예상대로 integer로 전환이 안된다고 나옵니다. 그런데 여기서 힌트가 있는데 "USING "gamePrice"::integer"를 쓰라고 하네요. 이걸 추가해서 사용하도록 하겠습니다.
2. Table의 column속성을 변경하기(기존 데이터 유지)
- 해당 컬럼속성을 변경합니다. 아래는 VARCHAR속성에서 INTEGER로 변경하는 것입니다.
ALTER TABLE payment ALTER COLUMN "gamePrice" TYPE integer USING "gamePrice"::integer;
사진4) 변경되지 않은 record |
댓글
댓글 쓰기