2017-10-13 10 views
0

NULL이 아닌 INTEGER 열과 DEFAULT 값이있는 테이블이 있습니다.PostgreSQL : csv에서 누락 된 값을 NOT NULL이있는 열로 복사합니다. Constraint

일련의 csv 파일에서 데이터를 복사해야합니다.

이 파일 중 일부는이 열이 빈 문자열입니다.

지금까지 COPY 명령에서 NULL 매개 변수를 기존 값이 아닌 일부 값으로 설정 했으므로 빈 문자열은 NULL 값으로 변환되지 않지만 이제는 빈 문자열이 INTEGER 열의 값이 잘못되었다는 오류가 발생합니다.

속도 때문에 COPY 명령을 사용하고 싶지만 어쩌면 불가능할 수도 있습니다. 파일에 헤더가 없습니다. 파일의 모든 열에는 테이블에 해당 열이 있습니다.

그것은 거기를 지정하는 방법

:

빈 함정 수사가 제로
  1. , 또는 빈 문자열 기본 열 값을 사용하는 도중이있는 경우

  2. ?

+0

''와 (와) 같은 빈 문자열입니까? 그런 다음 문제는 형식이 일치하지 않습니다. 열이 단순히'123,, 456, etc. '이라면 기본값 0으로 설정하면 문제가 없습니다. –

+0

네, 타입 불일치라고 말하지만, 어떤 이유로 그것이 작동하지 않습니다. 나는 postgreSQL에 대한 경험이 없지만 COPY가 BULK 인서트와 같고 어떤 디폴트가 작동하지 않는 것처럼 보입니다. 임시 해결책을 구현했습니다. 임시 테이블을 NULL로 사용할 수 있습니다. 그런 다음 모든 NULL을 기본값으로 업데이트하고 마지막으로 레코드를 대상 테이블에 삽입하십시오. 내일 작업 예제를 파일 예제와 함께 게시 할 수 있습니다. –

답변

0

열을 포함하지 않는 테이블에서보기를 생성하고 열을 INSTEAD OF INSERT 만들 수 있습니다. 해당보기에 COPY 데이터가 있으면 테이블에 기본값이 사용됩니다. 실적이 충분히 좋을지 모르겠다.

+0

제안 해 주셔서 감사합니다. 잠시 동안, 나는 다른 workaroud로 향했다. TEMP TABLE + UPDATE + INSERT (원래 게시물 아래 내 의견 참조). 중요한 질문은 컬럼이 COPY에 명시 적으로 언급 될 때 디폴트 값이 COPY 조작과 함께 작동해야하며 유형 불일치를 피하는 방법입니다. –