程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在 PostgreSQL 中删除表失败

发布于2023-05-30 03:10     阅读(526)     评论(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 中的磁盘大小回收,您可以尝试以下操作:

  1. 在表删除之前执行截断以回收空间
  2. 或者,在删除表后执行 VACCUM FULL 以将所有可能的可用空间回收到数据库中。

在这里阅读更多:

  1. 清理 PG 表中的行后未释放的磁盘空间,https://dba.stackexchange.com/questions/187044/disk-space-unreleased-after-cleaning-up-rows-from-pg-table
  2. 数据库表大小没有按比例减少,数据库表大小没有按比例减少


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1983592/1c92dff58d23d485b3a3/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)