에러해결(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

위 사진 3,4를 보면 column값이 성공적으로 VARCHAR -> INTEGER로 변경됬을 뿐만 아니라 데이터도 그대로 보존 된것을 알수 있습니다.

이처럼 가격과 같은 숫자로 저장해야 할것을 문자로 저장해도 sql문으로 변경이 가능합니다.

댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)