2013-03-29 5 views
2

내 테이블에 'mytable'이라는 테이블이 있습니다. 나는 그것을 깨끗하게하고 싶다. 그래서 나는 그것으로부터 '신선한 데이터'를 계속 수집하고 분석 할 수있다.psql - 테이블을 삭제하지 않고 데이터베이스 내용을 플러시하는 방법

conn = psycopg2.connect(database = mydb_name, host = mydb_server, user = mydb_uname, password = mydb_pwd) 
cur = conn.cursor() 
cur.execute("DROP TABLE mytable;") 

같은

뭔가 지금까지의 내가 그것을 이해,이 테이블을 파괴하기 때문에, 나를 위해 작동하지 않을 것입니다. 나는 파괴하거나 다시 만들고 싶지 않습니다 ... 단지 모든 데이터를 없애기 위해서입니다.

어떻게 해결할 수 있습니까?

답변

5
Truncate tablename 

이 유용, 표는 데이터를 삭제 상태로 유지! 당신이 외래 키가있는 경우

는이 문서에 명시된 바와 같이이

Truncate table1, table2, table3 

귀하의 예를

Cur.execute("truncate mytable;") 
+0

모든 테이블 이름을 열거하고 모든 테이블의 모든 데이터를 자르지 않게하려면 어떻게해야합니까? 'DELETE * FROM *;'? 아니면 'TRUNCATE *'입니까? – jml

+0

@jml 이것을 확인해보십시오. http://stackoverflow.com/questions/2829158/truncating-all-tables-in-a-postgres-database – 8bitcat

+0

이 코드는 내 컴퓨터를 정지시킵니다. 동시 파이썬 실행 파일이 db. 대안을 제시 할 수 있습니까? 전파 코드 기반이 ID에 의존하기 때문에 이것이 발생할 수 있다고 생각하십니까? – jml

2

이 SQL 쿼리는 테이블에서 모든 레코드를 삭제해야 ...

DELETE FROM mytable; // not DELETE * FROM mytable; 
+2

같이 할 많은 테이블의 경우 다음

Truncate tablename CASCADE 

를 사용해야합니다 : TRUNCATE를 테이블 집합에서 모든 행을 신속하게 제거합니다. 각 테이블에 대한 규정되지 않은 DELETE와 동일한 효과가 있지만 실제로 테이블을 스캔하지 않으므로 더 빠릅니다. 또한 후속 VACUUM 작업을 요구하기보다는 즉시 디스크 공간을 재 확보합니다. 이것은 대형 테이블에서 가장 유용합니다. 그러나 병행 컨텍스트 인 경우 DELETE가 더 안전합니다. –

관련 문제