postgresql PostreSQL查询

rryofs0p  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(1)|浏览(123)

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

nwnhqdif

nwnhqdif1#

RDBMS中的表删除一般不会回收磁盘空间,以便快速插入,而不需要数据库请求分配。(当您从数据库中删除数据时,该数据使用的空间在数据库文件中标记为“空闲”,可供新数据行使用)
然而,像dataPostgreSQL这样的RDBMS中的表删除应该回收数据库的统计页面上的大小。(我在PostgreSQL〉= v14中测试了这一点,并且表删除和表截断回收统计页面上的大小,而从表删除不回收统计页面上的大小)。
所以不要把磁盘大小和数据库大小混在一起。此外,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

相关问题