Postgresql drop schema是直接物理删除所有表么?

发布于 2022-09-12 13:30:11 字数 62 浏览 39 评论 0

drop schema是直接把模式下的所有表物理删除, 还是标记删除?

会对数据库造成哪些影响呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ι不睡觉的鱼゛ 2022-09-19 13:30:11

是直接物理删除的。磁盘空间被释放了。
对表的 DELETE、UPDATE 等操作,才是标记删除(不释放磁盘空间)。

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

烟凡古楼 2022-09-19 13:30:11

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文