星点互联edus视频培训演示站

标题: Postgresql drop schema是直接物理删除所有表么? [打印本页]

作者: 摸魚校尉JAY    时间: 2020-11-27 16:13
标题: Postgresql drop schema是直接物理删除所有表么?
drop schema是直接把模式下的所有表物理删除, 还是标记删除?
会对数据库造成哪些影响呢?


作者: admin    时间: 2020-11-27 16:15
以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
是直接物理删除的。磁盘空间被释放了。
对表的 DELETE、UPDATE 等操作,才是标记删除(不释放磁盘空间)。

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




欢迎光临 星点互联edus视频培训演示站 (http://47.100.112.22/demo/edus/) Powered by Discuz! X3.5