2013-03-29 58 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 tablename CASCADE 

對於許多表做這樣

Truncate table1, table2, table3 

你的榜樣

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

我該如何避免枚舉所有的表名,並截斷所有表中的所有數據? '刪除*從*;'?或者'TRUNCATE *'? – jml

+0

@jml檢查了這個http://stackoverflow.com/questions/2829158/truncating-all-tables-in-a-postgres-database – 8bitcat

+0

這段代碼凍結了我的機器,因爲有一個併發的python可執行文件正在傳播D b。你能提出一個替代方案嗎?你認爲這可能是因爲傳播代碼基礎依賴於ID嗎? – jml

2

該SQL查詢應該從表中刪除所有記錄...

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

如DOC聲明:TRUNCATE快速刪除一組表中的所有行。它與每個表上的非限定DELETE具有相同的效果,但由於它實際上並不掃描表,所以速度更快。此外,它立即回收磁盤空間,而不需要後續的VACUUM操作。這在大型表格上最有用。 但是,如果您處於併發環境中,則DELETE更安全。 –

相關問題