发布于2023-05-30 03:10 阅读(471) 评论(0) 点赞(22) 收藏(5)
我正在使用 postgreSQL 数据库,我需要用这个脚本删除一个表:
import psycopg2
# Connect to the PostgreSQL database
conn = psycopg2.connect(
host="your_host",
database="your_database",
user="your_username",
password="your_password"
)
# Create a cursor object to execute SQL commands
cur = conn.cursor()
# Define the name of the table to delete
table_name = "your_table_name"
# Define the SQL query to delete the table
delete_table_query = f"DROP TABLE IF EXISTS {table_name};"
cur.execute(delete_table_query)
conn.commit()
cur.close()
conn.close()
当我执行此代码并检查已删除的表时,我看到它已删除且为空但是当我检查我的数据库的大小时仍然相同尽管我删除了 4gb 的数据,这个脚本中的问题是什么
RDBMS 中的表删除通常不会回收磁盘空间,以便进行不需要数据库请求分配的快速插入。(当您从数据库中删除数据时,该数据使用的空间在数据库文件中被标记为“空闲”,可供新数据行使用)
然而,像 dataPostgreSQL 这样的 RDBMS 中的表删除应该回收数据库统计页面上的大小。(我在 PostgreSQL >= v14 中对此进行了测试,表删除和表截断回收了统计页面上的大小,而从表中删除不会回收统计页面上的大小)。
所以不要混淆磁盘大小和数据库大小。此外,drop table、delete from table 和 truncate table 之间也有区别,所以不要混用这两种情况(正如您在评论中写的那样,您从 delete 更改为 truncate,但在示例中您有 drop)。
对于 PostgreSQL 中的磁盘大小回收,您可以尝试以下操作:
在这里阅读更多:
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/1983592/1c92dff58d23d485b3a3/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!