개인(팀) 프로젝트/해상물류 통합 데이터 플랫폼 프로젝트

데이터베이스에 csv 파일 업로드 시 에러(value too long for type character) 해결

한소희DE 2021. 8. 1. 01:17
에러 살펴보기
ERROR: value too long for type character varying(76)  Call getNextException to see other errors in the batch.

 

 

프로젝트 도중 csv 파일을 데이터베이스에 넣어야 했는데, 이때 위와 같은 오류로 데이터가 들어가지 않는다는 이야기를 듣고, 함께 해결에 나섰다!

 

 

 

처음 에러를 봤을 때는, 초기 설정한 스키마의 글자 수 등의 제한에 걸려서 저장이 안되는 줄 알았는데, 전반적으로 TRUNCATE 가 필요한 상황이라는 것을 알았다.

 

여기서 잠깐! TRUNCATE란? 데이터 테이블은 그대로 남겨놓되, 그 안에 알맹이(인덱스, 스키마, 데이터 등)들을 모두 초기화하는 sql 명령 중 하나다.

 

 

 

그렇다면, TRUNCATE 설정은 어떻게 하는가?

나는 DBeaver를 통해서 데이터를 삽입하곤 했는데, 이때 생성한 테이블에 '데이터 가져오기'를 눌러 csv를 선택해주면 된다. 

 

 

위 파일처럼 말이다! Data load 에서 Truncate 를 반드시 설정해주자. 그러면 지금까지 생성됐던 설정정보가 초기화돼서 오류가 나지 않는다.

 

 

그리고 이렇게 시도를 하다가도, 두 번째 에러가 발생하는데 에러는 아래와 같다.

 

에러 살펴보기 current transaction is aborted commands ignored until end of transaction block

 

 

이것은 commit 기본설정이 rollback으로 되어있지 않아서 그런 것이다. 따라서 roll-back으로 설정처리를 해줘야 한다.

 

여기서 잠깐! rollback을 설정하지 않으면 실패 시 rollback이 자동으로 실행되지 않는가? 

그렇다. 따라서 반드시 설정해줘야 한다.

 

여기서 잠깐2! rollback이란? 작업 중 문제가 발생했을 때, 트랜잭션의 처리 과정에서 발생한 변경 사항을 취소하며 해당 트랜잭션을 처리하기 이전 상태로 돌아가는 것이다. 이때 해당 트랜잭션으로 인한 하나의 모든 처리(이때의 모든 처리는 transaction(insert, update, delete)를 말한다.) 가 시작되기 이전 상태로 되돌리는 것이다. 

 

 

 

이것을 설정하면 데이터는 정상적으로 잘 들어가게 된다!