返回顶部

[数据库] Postgresql drop schema是直接物理删除所有表么?

[复制链接]
摸魚校尉JAY 显示全部楼层 发表于 2020-11-27 16:13:37 |阅读模式 打印 上一主题 下一主题
未解决23
55 2
Postgresql drop schema是直接物理删除所有表么?
摸魚校尉JAY2020-11-27 16:13:37
drop schema是直接把模式下的所有表物理删除, 还是标记删除?
会对数据库造成哪些影响呢?

回复

使用道具 举报

精彩评论2

admin 显示全部楼层 发表于 2020-11-27 16:15:28
以PostgreSQL当前的存储引擎(截止到13.0)来说,都可以简单理解为"标记删除".
这是因为在PG当前的存储引擎设计中,被删除的行 或者是 UPDATE语句中被替换的行,都是仍然物理存在在原处的。只是通过了多版本机制在行头加入了xmax来保证事务可见性。

这些行真正被删除需要等到VACCUM执行的时候(可以理解成高级编程语言中的GC)才会去做真正的物理删除。

此外,SCHEMA,TABLE这些数据库对象的元数据也都是保存在不同的系统表(SYSTEM CATALOG)中, 系统表的删除机制与普通数据表是一样的。

最后,在DROP SCHEMA时,如果语句中不带上CASCADE, 那么当要删除的目标SCHEMA下还有从属的数据库对象(如TABLE, SQUENCE等)时,DROP SCHEMA将被拒绝执行。
回复

使用道具 举报

超级玛丽 显示全部楼层 发表于 2020-11-27 16:16:22
是直接物理删除的。磁盘空间被释放了。
对表的 DELETE、UPDATE 等操作,才是标记删除(不释放磁盘空间)。

把表看成磁盘上的文件就很好理解了。DROP TABLE/SCHEMA,对应文件的删除,没啥说的。而 DELETE/UPDATE 只涉及修改部分文件内容,因此一般不会删除文件,只是标记下被修改的部分,下次 INSERT 的时候可以直接覆盖。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

星点互联 成立于2014年8月,是目前国内优秀的开源技术社区,拥有超过300万会员,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作