我正在使用PostgreSQL DB,我需要用这个脚本删除一个表:
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的数据,什么是这个脚本的问题
1条答案
按热度按时间pgky5nke1#
RDBMS中的表删除一般不会回收磁盘空间,以便快速插入,而不需要数据库请求分配。(从数据库中删除数据时,该数据使用的空间在数据库文件中标记为“空闲”,可供新数据行使用)
然而,像dataPostgreSQL这样的RDBMS中的表删除应该回收数据库的统计页面上的大小。(我在PostgreSQL >= v14中测试了这个,table drop AND table truncate回收统计页面的大小,而delete from table不回收统计页面的大小)。
因此,不要将磁盘大小与数据库大小混淆。此外,drop table,delete from table和truncate table之间也有区别,所以不要混合这两种情况(因为你在注解中写的是从delete改为truncate,但在示例中你已经drop了)。
对于PostgreSQL中的磁盘大小回收,您可以尝试以下操作:
1.在删除表之前执行截断以回收空间
1.或者,在表删除后执行VACCUM FULL,将所有可能的可用空间回收到数据库中。
阅读更多内容:
1.清理PG表中的行后未释放的磁盘空间,https://dba.stackexchange.com/questions/187044/disk-space-unreleased-after-cleaning-up-rows-from-pg-table
1.数据库表大小未按比例减少,Database table size did not decrease proportionately