psql - 如何在不删除表的情况下刷新数据库内容

Posted

技术标签:

【中文标题】psql - 如何在不删除表的情况下刷新数据库内容【英文标题】:psql - how to flush database content without dropping table 【发布时间】:2013-03-29 22:14:11 【问题描述】:

我的数据库中有一个名为“mytable”的表。我想清除它,以便我可以继续从中收集和分析“新数据”。

有点像

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

对我不起作用,因为据我了解,这会破坏桌子。我不想破坏/重新创建......只是为了刷新所有数据。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:
 Truncate tablename

对此很有用,表格只是删除数据!

如果你有外键,你需要使用以下

 Truncate tablename CASCADE

很多表都这样

 Truncate table1, table2, table3

你的例子

 Cur.execute("truncate mytable;")

【讨论】:

如何避免枚举所有表名,而只截断所有表中的所有数据? DELETE * FROM *; ?或者TRUNCATE * @jml 看看这个***.com/questions/2829158/… 这段代码冻结了我的机器,因为有一个并发的 python 可执行文件正在传播数据库。你能建议一个替代方案吗?您认为这可能是因为传播代码库依赖于 ID 吗?【参考方案2】:

这个 sql 查询应该从表中删除所有记录...

DELETE FROM mytable; // not DELETE * FROM mytable;

【讨论】:

如文档中所述:TRUNCATE 快速从一组表中删除所有行。它与每个表上的非限定 DELETE 具有相同的效果,但由于它实际上并不扫描表,因此速度更快。此外,它会立即回收磁盘空间,而不需要后续的 VACUUM 操作。这在大表上最有用。但如果您处于并发上下文中,则 DELETE 会更安全。

以上是关于psql - 如何在不删除表的情况下刷新数据库内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?

我们如何在不使用 `psql` 的命令或选项的情况下显示集群中的所有数据库? [复制]

为啥对话框会在不刷新的情况下删除其内容?

在不重新加载的情况下向 div 添加/删除内容

如何在不刷新的情况下提交表单?

如何在不知道其表的情况下删除约束?