Postgresql drop schema是直接物理删除所有表么?
drop schema是直接把模式下的所有表物理删除, 还是标记删除?
会对数据库造成哪些影响呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
drop schema是直接把模式下的所有表物理删除, 还是标记删除?
会对数据库造成哪些影响呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
是直接物理删除的。磁盘空间被释放了。
对表的 DELETE、UPDATE 等操作,才是标记删除(不释放磁盘空间)。
把表看成磁盘上的文件就很好理解了。DROP TABLE/SCHEMA,对应文件的删除,没啥说的。而 DELETE/UPDATE 只涉及修改部分文件内容,因此一般不会删除文件,只是标记下被修改的部分,下次 INSERT 的时候可以直接覆盖。
以PostgreSQL当前的存储引擎(截止到13.0)来说,都可以简单理解为"标记删除".
这是因为在PG当前的存储引擎设计中,被删除的行 或者是 UPDATE语句中被替换的行,都是仍然物理存在在原处的。只是通过了多版本机制在行头加入了
xmax
来保证事务可见性。这些行真正被删除需要等到VACCUM执行的时候(可以理解成高级编程语言中的GC)才会去做真正的物理删除。
此外,SCHEMA,TABLE这些数据库对象的元数据也都是保存在不同的系统表(SYSTEM CATALOG)中, 系统表的删除机制与普通数据表是一样的。
最后,在
DROP SCHEMA
时,如果语句中不带上CASCADE
, 那么当要删除的目标SCHEMA下还有从属的数据库对象(如TABLE, SQUENCE等)时,DROP SCHEMA
将被拒绝执行。