2016-06-16 3 views
0

루프에서 실행중인 psycopg2에 COPY 명령이 있습니다. 매번 새로운 사본을 작성하는 대신 CSV에 어떻게 추가 할 수 있는지 알고 싶었습니다.복사 명령 postgres가 csv 파일에 추가

코드 : 사전에

while True: 

    cur.execute("COPY (SELECT id,a,b,c,d from t1,t2 WHERE date>= TIMESTAMP TIMESTAMP %(t)s AND date < TIMESTAMP %(t)s + interval '1h' * t2.frequency) \ 
      TO 'path/to/file.csv' DELIMITER ',' CSV;", d) 

감사합니다.

+0

못생긴 해킹 (단지 유닉스에서 작동)입니다? http://stackoverflow.com/help/mcve 및 http://stackoverflow.com/help/how-to-ask를 참조하십시오. –

+0

질문이 업데이트되었습니다. 복사 명령이 루프에서 사용될 때 csv 파일에 추가하는 것은 꽤 일반적인 질문입니다. – delalli

+0

나는 덧붙일 수있는'COPY '를 기억하지 않는다; 그러나 이미 파이썬을 사용하고 있으므로 모든 출력을 단일 파일로 결합하지 않는 이유는 무엇입니까? – Nicarus

답변

2

이것은 당신이 질문의 코드 섹션과 질문을 업데이트 할 수

COPY table_one(id) 
TO PROGRAM 'cat - >/tmp/onetwo.out' 
     ; 

COPY table_two(id) 
TO PROGRAM 'cat - >>/tmp/onetwo.out' 
     ; 
+0

나는 이것을 시도하지 않았다. 그것은 무엇을합니까? 설명해 주시겠습니까? 파일 이름의 경로가 /tmp/onetwo.out 인 것을 알고 있습니다. 첫 줄에는 싱글>이 있고 두 번째 줄에는 >>이 있습니까? – delalli

+0

https://www.postgresql.org/docs/9.5/static/sql-copy.html copy 명령은 파일 대신 프로그램의 stdout/stdin에서 읽고 쓸 수 있습니다. (이것은 유닉스를 가정하고, windows가 쓸모있는 파이프를 가지고 있는지 모르겠다.) – joop

+0

'> '는 프로그램의 출력을 파일로 재전송한다. '>>'도하지만 * 파일에 *를 추가합니다. 'cat -' 프로그램은 단순히 stdin을 stdout에 복사합니다. – joop

관련 문제