2017-11-16 2 views
-1

복사 명령을 사용하여 크기가 약 1GB 인 대형 CSV 파일을 가져 오려고합니다. 그러나 조건은 열 A1 데이터 형식이 숫자이며 Csv 파일의 데이터가 숫자 형식이지만 값의 일부가 영숫자 인 경우입니다. 그래서 수입하지 않습니다. 내가 원하는 것은 colum A1의 숫자가 아닌 값을 null로 설정하고 데이터를 가져옵니다. 복사 명령에서 원하는 모든 조건. CSV 파일 샘플입니다.postgresql에 CSV 파일 가져 오기

<table border=true> 
 
<tr> 
 
<th >A1</th> 
 
<th>A2</th> 
 
<th>A3</th> 
 
</tr> 
 
<tr> 
 
<td>90</td> 
 
<td>91</td> 
 
<td>92</td> 
 
</tr><tr> 
 
<td>A21</td> 
 
<td>B23</td> 
 
<td>C43</td> 
 
</tr><tr> 
 
<td>12</td> 
 
<td>13</td> 
 
<td>14</td> 
 
</tr> 
 
<tr> 
 
<td>12ddwd3</td> 
 
<td>1yhh53</td> 
 
<td>1dfsf754</td> 
 
</tr> 
 
<tr> 
 
<td>12</td> 
 
<td>13</td> 
 
<td>14</td> 
 
</tr> 
 
</table>

표 메타 데이터가 A1 숫자, A2의 숫자가 될 것입니다, A3 숫자 나는 테이블과 NULL로 설정됩니다 숫자가 아닌 값으로 csv 파일을 가져올.

+1

1. 수입, 문자 및 숫자, 3 ALTER 테이블이 변경 널 (null)로 설정 2. 업데이 트를 columntype이는 CSV 파일이 아닙니다 –

+3

을 int로. – lexicore

+0

표시되는 입력 내용은 CSV가 아닌 XML입니다. –

답변

0

캔트 조건은 COPY 파일에서 테이블. 대신 할 수있는 일 : 텍스트로

create table t (a1 text, a2 text, a3 text); 
COPY t from file; 
update t set a1 = null where a1 !~ '^\d{1,}$'; 
alter table t alter column a1 type int using a1::int; 
+0

내가 10000 레코드의 100 열에 대해 다음이 접근 방식을 따르는 경우 20-30 분 복용. 업데이트 및 너무 많은 시간을 가져라. 쿼리 최적화를위한 솔루션 필요 – user6097055