2011-02-03 2 views
2

Hello 나는 csv에 postgres 테이블을 덤프하고 싶습니다. 데이터베이스는 내가 작업하고있는 (리눅스) 머신에 로컬이다.psql 테이블 및 메모리 사용량 덤프

psql dev -U myusername -c "select * from control.mytable;" > mydata.csv 

mytable은 약 1 억 2 천만 행입니다. 나는 이것이 너무 많은 메모리를 차지할 것이라고 걱정하며, 맨 위로 모니터 할 때 메모리 사용량이 계속 증가하는 것처럼 보이므로 어떤 지점에 도달하면 그것을 죽입니다. 누군가 이 정말로 인 경우 아는 사람입니까? 나는 톱에 의해보고 된 사용법이 나 자신과 같은 초조 한 사람에게는 다소 오해 할 수 있음을 안다. 메모리를 많이 차지하지 않는 대안이 있습니까?

+1

가능한 중복 : http://stackoverflow.com/questions/2768702/dump-to-csv-postgres-memory – payne

답변

1

COPY을 사용하여 csv를 만드는 이유는 무엇입니까? COPY는 훨씬 더 잘합니다.

1

이렇게하면 전체 결과 집합이 클라이언트에 구축됩니다. 네, 정말 많은 메모리를 사용하고 있습니다. 이를 완화하려면 커서를 사용하여 결과를 일괄 적으로 가져옵니다. 또는 이미 CSV 모드가 내장되어있는 COPY을 사용하십시오.

1

COPY를 사용하는 경우 postgres 사용자로 실행하지 않으면 stdout으로 이동해야합니다. 그러면 파일로 직접 이동할 수 있습니다.

psql -U myusername dev -c "COPY (select * from control.mytable) TO STDOUT WITH CSV HEADER;" > mydata.csv 
+0

좋은 답변 -이 나에게 많은 도움이되었습니다. – thetaiko