【问题标题】:Truncated a table in postgresql. How to recover it back?在 postgresql 中截断了一个表。怎么找回来?
【发布时间】:2016-05-17 18:33:35
【问题描述】:

截断表表名;

如何在 dbeaver 中恢复它

【问题讨论】:

  • 你可以从备份中取回它。
  • 我相信这个问题可能与stackoverflow.com/questions/28321999/…重复
  • 如果你还没有提交,做一个回滚
  • 它设置为自动提交,所以回滚不起作用。

标签: postgresql postgresql-9.1 postgresql-9.2


【解决方案1】:

你不能。见文档:http://www.postgresql.org/docs/9.1/static/sql-truncate.html

它与每个表上的非限定 DELETE 具有相同的效果,但 因为它实际上并不扫描表,所以它更快。此外, 它立即回收磁盘空间,而不需要后续的 真空操作。这在大表上最有用。

空间返回给操作系统,它可能被新数据等占用。

【讨论】:

  • 如果您足够绝望,您可以尝试标准的已删除文件恢复技术。如果您能够恢复该文件,您可以尝试将其“重新放入”目录中,并且您可能能够读取其中的大部分内容,具体取决于已恢复的数量以及其他一些考虑因素。
【解决方案2】:

Tuncate 使用文件级操作来删除数据,这有很多含义:

  1. 提交时您无法恢复
  2. 这不是 MVCC 安全的。换句话说,其他并发事务将表视为空,尽管事务隔离级别应该让他们看到旧行。

这意味着您基本上必须从备份中恢复,这是一个很好的案例,可以用来警告备份不仅仅是硬件故障。它们也存在于管理员错误的情况下(这就是复制不是备份的原因)。

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 2019-02-11
    • 2022-01-17
    • 1970-01-01
    • 2017-09-23
    • 2012-07-10
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多