2012-06-28 3 views
1

CSV 파일의 데이터를 PostgreSQL 테이블로 가져옵니다.CSV에서 PostgreSQL 대량 가져 오기가 실패했습니다. 오류 : 정수에 대한 입력 구문이 잘못되었습니다. "1990-01-02"

표는 다음과 같습니다 : 나는 psql의의 CLI에서 COPY 명령을 호출 할 때

CREATE TABLE foo_stats (
         td      DATE NOT NULL, 
         ins_id     INTEGER CHECK (ins_id > 0) NOT NULL, 
         df_id     INTEGER CHECK (df_id > 0) NOT NULL, 
         pc      REAL NOT NULL DEFAULT 0.0, 
         ph      REAL DEFAULT 0.0 NOT NULL, 
         pl      REAL DEFAULT 0.0 NOT NULL, 
         av      REAL DEFAULT 0.0 NOT NULL, 
         cv      BIGINT DEFAULT 0 NOT NULL, 
         avi      REAL DEFAULT 0.0 NOT NULL, 
         cmi      BIGINT DEFAULT 0 NOT NULL, 
         vwp      REAL CHECK (vwp >= 0) NOT NULL, 
         atr      REAL NOT NULL DEFAULT -99999, 
         pv      REAL NOT NULL DEFAULT -99999, 
         pr      REAL NOT NULL DEFAULT -99999, 

         PRIMARY KEY      (ins_id, df_id, td) 
         ); 

는 대량 복사하기 전에, 내가 여기

ALTER TABLE DROP CONSTRAINT PRIMARY KEY는 CL의 흔적이다 사용하여 기본 키를 드롭 :

여기
mydb=# COPY foo_stats FROM '/path/to/data/foo_stats.csv' WITH CSV; 
ERROR: invalid input syntax for integer: "1990-01-02" 
CONTEXT: COPY foo_stats, line 1, column id: "1990-01-02" 
mydb=# 

입력 CSV 파일의 처음 몇 줄과 같은 모습입니다 :

"1990-01-02",388,3,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999 
"1990-01-02",388,4,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999 
"1990-01-02",388,1,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999 
"1990-01-02",388,7,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999 
"1990-01-02",388,6,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999 

입력 파일의 데이터 열은 테이블 스키마와 동일한 순서로 있습니다. 아무도 왜 오류 메시지가 나타납니다 설명 할 수 있습니까?

PS : 나는 우분투 10.0.4 LTS에

+1

여기에 뭔가가 없습니다. 방금 정의를 사용하여 테이블을 만들었고 샘플 데이터를 파일에 복사 한 다음'COPY foo_stats FROM 'c : \ tmp \ foo_stats.csv'CSV;와 함께 가져 왔습니다. – vyegorov

답변

1

절단을 PostgreSQL의 8.4을 사용하여 테이블 정의를 붙여 샘플 데이터를 여기에 모든 작업을 표시하고 있습니다.

그래서 테이블 정의 나 파일이 생각했던 것과 다를 수 있습니다. 테이블 열의 순서가 다른 경우 COPY 명령에서 열을 지정할 수 있습니다.

파일이 다를 경우 아마 육안으로 볼 수없는 것이거나 묻기 전에 발견했을 것입니다. 나는이 파일이 Windows 컴퓨터에서 온 것 같지 않습니까?

세 가지 확인을 위해 :

    파일의 시작
  1. 불필요한 바이트 순서 마크 (BOM) \ 연구 \ n이 아니라 \ n보다
  2. 모든의
  3. 라인 엔딩 기타 제어 코드

샘플 데이터를 잘라내어 붙여 넣기를 시도해보십시오. 그렇다면 텍스트 편집기에서 실제 파일을 열고 다시 저장하십시오. 문제가 해결되면 16 진수 편집기를 가져 와서 샘플 파일의 실제 바이트를 살펴보십시오.

+0

이 가능성에 관심을 가져 주셔서 감사합니다. 그것은 내 db 스키마가 이전 테스트 중에 db에서 변경되었고, 예상했던 것과 다릅니다. 지금 고쳤다. –