2014-12-01 3 views
1

9 백만 행의 큰 .csv 파일이 있습니다. 이러한 열 중 일부는이 .csv 파일에서 데이터베이스로 가져 오려는 따옴표 나 다른 특수 문자가 포함 된 텍스트를 포함합니다. 예를 들어이 행을 가져 오려면 다음과 같이 입력하십시오.Postgres가 큰 따옴표 값을 가져옵니다.

ID BH Units  Name       Type_building  Year_cons 
1 4 900.00  schoolgebouw "De Bolster  Schoolgebouw  2014-01-01 

위의 네 번째 열에 큰 따옴표가 있습니다. .csv 파일의 값은 따옴표로 묶이지 않지만 때로는 큰 따옴표 또는 백 슬래시 '\'가 텍스트에 나타납니다.

다음과 같은 오류 메시지가 표시됩니다. 다양한 문자 유형 (25)에 대한 ERROR 값이 길어집니다. 분명히 문자열의 시작으로 큰 따옴표를보고 .csv 파일 (다섯 번째 및 여섯 번째 열 포함)의 모든 내용을 단일 셀로 결합하려고합니다 (셀에 'De Bolster Schoolgebouw 2014- 01-01 '),'Name '열에 최대 25 자까지 입력 할 수 있으므로 적합하지 않습니다.

\COPY <tablename> FROM <path to file> WITH CSV DELIMITER ';' QUOTE E'\b' NULL '\N'; 

그것이 무엇이다하는 것은이 경우 A의, 뭔가 다른 (기본값은 큰 따옴표입니다) 견적 값을 설정 내 생각 :

나는이 솔루션을 제시되었던 유사한 주제 ( Is it possible to turn off quote processing in the Postgres COPY command with CSV format?를) 발견 백 스페이스이므로 큰 따옴표를 더 이상 따옴표로 인식하지 못합니다. 그러나 이것을 실행할 때 또 다른 오류가 발생합니다 : integer에 대한 INVALID 입력 구문.

모든 값은 이제 인용되므로 '1'값의 ID는 ''1 ''값이되고 ID는 정수로 정의되므로 따옴표를 사용할 수 없습니다.

.csv 파일에서 큰 따옴표 및 다른 특수 문자를 Postgres 데이터베이스로 가져 오는 방법을 알고 있습니까?

미리 감사드립니다.

+0

값 길이에 제한이없는 (테스트) 테이블에서 가져 오기를 시도 했습니까? 따옴표는 올바르게 인용 될 때 문제가되어서는 안됩니다. –

+0

CSV에서 직접 샘플 행을 제공 할 수 있습니까? – pozs

답변

1

오류 메시지에 따르면 이중 따옴표 나 정렬과 관련이있는 것으로 의심됩니다. 그렇다면 광범위하게보고 된 버그 일 수 있습니다.

Postgres의 경우 오류 메시지는 거의 항상 정확하고 유용합니다. 따라서 눈을 만나는 것보다 더 많은 인물이 있다는 사실을 고려하십시오.

내 추측으로는 어딘가에 후행 (또는 선행) 공간이 있고 실제로 스프레드 시트에서 볼 때 길이가 24자인 데이터 조각이있는 것입니다.

두 번째 추측은 일종의 비자로 (bizarro) 문자가 충돌 또는 효과를 설정하는 것입니다. 아마도 이중 바이트 문자 또는 거기에 분음 기호로 인해 단일 문자로 동작하는 두 개의 단일 문자가있을 수 있습니다. 이 뷰어는 데이터를 위해 사용하는 뷰어에서 잘 보입니다. 하지만 이들이 utf8로 해석되거나 보일 때 두 개의 별개 문자로 계산됩니다. 가능성은 낮지 만 가능합니다 (example).

마지막으로 Frank의 제안에 따라 길이 제한을 제거해보십시오. 삽입물의 속도가 느려지고 앞으로 나아갈 수 없기 때문에 상황이 나빠질 때만 속도가 느려집니다. 가져 오기가 완료되면 테이블의 정의에 제약 조건을 다시 추가하십시오. 다음과 같은 항목을 사용하여 문제의 행을 찾을 수 있습니다.

select name from table where length(name) > 24; 

...그것들을 수정하면 어떤 목적을 위해서라도 제약 조건을 다시 추가 할 수 있습니다. (힌트 : 그것은하지 않거나 적어도 가질 필요가 없다. "김정일 섹시한 영광스러운 야수 신성한 딕 신부 아버지는 러블리 아이언 맨조차 독특한 포 윈우 찰리 고라 카오스 메한 Hansa Kimmy Humbero Uno 댄스 셰이크 오버 마스터 Bouti Bepop Rocksteady Shredder Kung Ulf로드 하우스 Gilgamesh 플랩 가이 Theo Ass Im Yoda 펑키 보이 슬램 오리 Chuck Jorma Jukka Pekka 라이언 Super Air Ooy Rusell 살바도르 Alfons Molgan Akta 파파 Long Nameh Ek. ")

+0

고마워요! 참으로 숨겨진 공간이 있었기 때문에 그것이 적합하지 않았습니다. 이것을 지적 해 주셔서 감사합니다, 나는 결코 짐작하지 않을 것입니다 :) –