2011-03-14 2 views
1

레일즈 애플리케이션이 있는데 PostgreSQL의 COPY 명령을 통해 데이터를로드하려고합니다. 파일은 CSV입니다. 이 테이블은 Rails 모델에 매핑되며 model.for_each를 사용하여 데이터를 재생할 수 있도록 기본 키 ID 열을 유지해야합니다. 테이블에는 5M + 행이 있습니다.ID 열이있는 COPY CSV 파일

내 질문은 데이터를 테이블로로드하고 ID 열을 허용 할 수 있도록 내 CSV를 어떻게 구성 할 수 있습니까? 내가 필요로하는 유일한 이유는 for_each 메소드 때문입니다.

NULL,col1,col2,col3,col4, etc. 

을하지만 그것은 작동하지 않습니다

에 관계없이, 나는 같이 null을 전송했습니다.

감사합니다.

+0

을 아차. 나는 '\ N'NULL을 전달하려고 노력하고있다. 어쩌면 오랜 과거의 MS-SQL 시대가 여기에있는 문제 일 수 있습니다. 대기 ... –

+0

아니요. The \ N 중 하나를 작동하지 않았다. –

답변

3

것 null 문자열에 대해 설정 한 옵션에 관계없이 절대로 작동하지 않습니다. 백엔드에 기본 키를 null로 설정하라는 명령을 내리면 삽입 할 명령이 무엇이든 관계없이 절대 허용되지 않습니다.

기본 키를 유지하면 어떤 의미인지 알 수 없습니다. 그것은 무엇이든지간에 유지 될 무언가입니다.

COPY country (colA, colB, colC) FROM '/usr1/proj/bray/sql/country_data'; -- leave out pkey 

또한 문서를 읽을 빨리 수 있습니다 : 당신은 명시 적으로 모든 열하지만, ​​기본 키의 이름을 DB를 당신을 위해 값을 선택하고 기본 키가 직렬 (자동 증가)입니다시키는 의미하는 경우 널 (null) 어떤 문자열 옵션을 대신 사용할 수있는 값을 추측으로 사용하고 싶습니다 :

http://www.postgresql.org/docs/9.0/static/sql-copy.html

+0

감사합니다. 이것은 도움이되었다. 내 질문에 대한 내 의견을 보게되면 네가 완전히 옳다. 나는 그것이 'NULL'대신 '\ N'이라고 가정했다. 감사. 당신이 생각할 때 무슨 일이 일어나는 지 알고 ... –

+0

재미있는! 내가 읽은 문서 (웃음) 때문에 테이블과 CSV 파일간에 일대일 열 매핑이 있어야한다고했습니다. 이것은 내가 ID 칼럼을 설명해야한다고 생각하게했고, 당신이 말하는 것을 할 수 없었습니다. 나는 그것을 시도 할 것이다. 다시 한 번 감사드립니다! –

+0

그게 작동합니다. 정말 고마워. –

1

기본 CSV와 함께 사용하여 다음과 같은 인용 부호가없는 빈 문자열이다 : 보이는 레코드를 생성 할

,col1,col2,col3,,col5 

같은 : 기본 키에 null를 건네

NULL,'col1','col2','col3',NULL,'col5' 
+0

이 결과로 시도 : ERROR : "id"열의 null 값이 null이 아닌 제약 조건을 위반 함 –

+0

NULL을 가져 오는 경우에도 여전히 기본 키 제약 조건을 준수해야합니다. 호환되도록 스키마 또는 데이터를 조정해야합니다. –