pg_dirtyread:基于 PostgreSQL 的数据恢复工具项目

https://gitcode.com/gh_mirrors/pg/pg_dirtyread.git

Branch1Tags23
This repository is empty

pg_dirtyread

pg_dirtyread 扩展提供了从关系(表)中读取已死亡但未被清理的行的能力。支持 PostgreSQL 9.2 及以后的版本。(在 9.2 版本中,至少需要 9.2.9 版本。)

构建

要构建 pg_dirtyread,只需执行以下操作:

make make install

如果您遇到类似以下错误:

make: pg_config: Command not found

请确保您已安装 pg_config 并且它在您的系统路径中。如果您使用像 RPM 这样的包管理器来安装 PostgreSQL,请确保也安装了 -devel 包。如有必要,告诉构建过程在哪里可以找到它:

make PG_CONFIG=/path/to/pg_config make install PG_CONFIG=/path/to/pg_config

加载与使用

一旦 pg_dirtyread 被构建并安装,您可以将其添加到一个数据库中。加载 pg_dirtyread 非常简单,只需以超级用户的身份连接到数据库,然后运行以下命令:

    CREATE EXTENSION pg_dirtyread;
    SELECT * FROM pg_dirtyread('tablename') AS t(col1 type1, col2 type2, ...);

pg_dirtyread() 函数返回 RECORD 类型,因此必须附加一个表别名子句来描述表结构。列的匹配是通过名称进行的,所以在别名中可以省略某些列,或者重新排列列。

例如:

    CREATE EXTENSION pg_dirtyread;

    -- Create table and disable autovacuum
    CREATE TABLE foo (bar bigint, baz text);
    ALTER TABLE foo SET (
      autovacuum_enabled = false, toast.autovacuum_enabled = false
    );

    INSERT INTO foo VALUES (1, 'Test'), (2, 'New Test');
    DELETE FROM foo WHERE bar = 1;

    SELECT * FROM pg_dirtyread('foo') as t(bar bigint, baz text);
     bar │   baz
    ─────┼──────────
       1 │ Test
       2New Test

已删除列

只要表格没有被重写(例如通过 VACUUM FULLCLUSTER),就可以检索到已删除列的内容。使用 dropped_N 来访问第 N 列,从 1 开始计数。PostgreSQL 删除了原始列的类型信息,因此在表别名中指定了正确的类型后,只能进行一些基本的合理性检查;检查的内容包括类型长度、类型对齐、类型修饰符以及按值传递。

    CREATE TABLE ab(a text, b text);
    INSERT INTO ab VALUES ('Hello', 'World');
    ALTER TABLE ab DROP COLUMN b;
    DELETE FROM ab;
    SELECT * FROM pg_dirtyread('ab') ab(a text, dropped_2 text);
       a   │ dropped_2
    ───────┼───────────
     Hello │ World

系统列

系统列如 xmaxctid 可以通过在 pg_dirtyread() 调用附加的表别名中包含它们来检索。提供了一个布尔类型的特殊列 dead,用以报告死亡行(如 HeapTupleIsSurelyDead)。在恢复期间,dead 列不可用,特别是在备用服务器上。oid 列仅在 PostgreSQL 版本 11 及以前版本中可用。

    SELECT * FROM pg_dirtyread('foo')
        AS t(tableoid oid, ctid tid, xmin xid, xmax xid, cmin cid, cmax cid, dead boolean,
             bar bigint, baz text);
     tableoid │ ctid  │ xmin │ xmax │ cmin │ cmax │ dead │ bar │        baz
    ──────────┼───────┼──────┼──────┼──────┼──────┼──────┼─────┼───────────────────
        41823 │ (0,1) │ 1484148500 │ t    │   1Delete
        41823 │ (0,2) │ 1484000 │ f    │   2Insert
        41823 │ (0,3) │ 1484148600 │ t    │   3Update
        41823 │ (0,4) │ 1484148800 │ f    │   4Not deleted
        41823 │ (0,5) │ 1484148911 │ f    │   5Not updated
        41823 │ (0,6) │ 1486000 │ f    │   3 │ Updated
        41823 │ (0,7) │ 1489011 │ t    │   5Not quite updated
        41823 │ (0,8) │ 1490022 │ t    │   6Not inserted

作者

pg_dirtyread 1.0 版本由 Phil Sorber 于 2012 年编写。Christoph Berg 在 2017 年发布的 1.1 版本中添加了检索系统列的能力,并接管了后续的维护工作。

许可

版权所有 (c) 1996-2024,PostgreSQL 全球开发组

版权所有 (c) 2012,OmniTI 计算机咨询公司

部分版权所有 (c) 1994,加利福尼亚大学校董会

保留所有权利。

在遵守以下条件的前提下,允许以源代码和二进制形式重新分发和使用(带或不带修改):

  • 源代码的再分发必须保留上述版权声明、本条款清单以及以下免责声明。
  • 二进制形式的再分发必须复制上述版权声明、本条款清单以及以下免责声明,并在随分发提供的文档或其它材料中予以说明。
  • 未经具体书面事先许可,不得使用 OmniTI 计算机咨询公司或其贡献者的名称来支持或推广源自本软件的产品。

本软件按“现状”由版权持有者和贡献者提供,并明确或隐含地放弃任何保证,包括但不限于对适销性和特定目的适用性的隐含保证。无论在任何责任理论下,无论是合同、严格责任还是侵权(包括疏忽或其他),版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于购买替代品、使用损失、数据损失或利润损失;或业务中断)承担责任,即使已告知本软件的使用可能造成此类损害。

Introduction

https://gitcode.com/gh_mirrors/pg/pg_dirtyread.git

Customize your domain