在PostgreSQL中删除表失败

taor4pac  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(639)

我正在使用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的数据,什么是这个脚本的问题

pgky5nke

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

相关问题