AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 315986
Accepted
ConanTheGerbil
ConanTheGerbil
Asked: 2022-08-24 23:43:31 +0800 CST2022-08-24 23:43:31 +0800 CST 2022-08-24 23:43:31 +0800 CST

Postgres 数据损坏工具?

  • 772

是否有任何技术/工具/方法来调查 postgres 表中的行级损坏?

这个论坛上提出的大多数解决方案都归结为“尝试执行 VACUUM FULL 来重建表,如果这不起作用,请删除表并从备份中恢复”

反正有没有真正修复数据?是否有读取和手动编辑原始 postgres 数据文件并仅删除/修复损坏的行的方法?

我正在使用的系统直接从外部提要读取数据到 postgres 表中,然后在夜间备份过程有机会保存它之前显示损坏的证据。重新运行外部提要不是一种选择,因此在实践中,如果我有任何损坏,一整天的数据都会丢失。

windows postgresql-14
  • 1 1 个回答
  • 33 Views

1 个回答

  • Voted
  1. Best Answer
    Vérace
    2022-08-25T20:56:17+08:002022-08-25T20:56:17+08:00

    PostgreSQL 可以包含两个(嗯,一个和一个包装器)工具,它们可能会在这里为您提供帮助—— amcheck和pg_amcheck。

    检查:

    amcheck是一个contrib 模块(以下简称 cm) - 这些是作为源分发的一部分提供的附加功能,但默认情况下未启用。请注意,许多这些 cm 被广泛使用,并且许多人建议它们应该默认出现 - 然而,PostgreSQL 的“精益和平均”理念意味着它们不是,新用户可能需要时间来弄清楚如何准确充分利用它们。

    例如,该pg_stat_statements扩展被 PostgreSQL 社区中的所有重量级人物广泛使用和推荐。顺便说一句,“贡献模块”和“扩展”基本上是同义词。但是请注意,虽然所有 cm 都是扩展,但并非所有扩展都是 cm - 远非如此。例如,虽然TimescaleDB和CitusData 都不是 cm(即它们没有与源代码捆绑在一起),但它们是扩展!如果您有兴趣,这里有一个完整的PostgreSQL 扩展生态系统。

    恕我直言,回到正题!

    amcheck 模块提供了允许您验证关系结构的逻辑一致性的功能。

    在 PostgreSQL 中,关系是表或索引。

    amcheck 可以有效地检测数据校验和无法捕获的各种类型的故障模式。

    您可以访问 amcheck 页面以获取有关其功能的更多详细信息。

    pg_amcheck:

    pg_amcheck 实用程序可以在$PGHOME/bin目录中找到。只有在使用make world或等效编译数据库时才能在此处找到它。它可能会或可能不会安装在您自己的发行版上,具体取决于 - 我可以确认它包含在 EnterpriseDB 的 Windows (14) 发行版中 - 我目前无法与其他发行版交谈。

    如上所述,它是amcheck扩展的包装器:

    pg_amcheck 支持对一个或多个数据库运行 amcheck 的损坏检查功能,可以选择检查哪些模式、表和索引,执行哪种检查,以及是否并行执行检查,如果是,并行数连接建立和使用。

    必须安装amcheck 扩展才能使用包装器(有意义!)。

    请注意(来自页面):

    • 一般来说,amcheck 只能证明腐败的存在;它不能证明它的缺席。

    • (释义)- amcheck 仅适用于 B-tree 索引。

    后者是,(恕我直言),一个严重的漏洞。

    用例:

    因此,让我们看一下这些工具的实际用例。

    • 2022 年 5 月 24 日,Michael Paquier 在推特上发布了关于使用 PostgreSQL 14 的潜在腐败问题

    • 2022-06-02 pganalyze.com上的一篇文章展示了如何使用 amcheck 来确认 bug 并查看它是否影响了您的系统

    概括:

    这里的重点是——我认为——没有系统 [is | 可以| 永远都是]完美的,像这样的工具[是| 可以| 可能] 在可能存在潜在问题的情况下不时需要 - 这有点像自卫权 - 你永远不想使用它,但你知道它就在那里,以防万一!

    NB PostgreSQL 已经在 2022 年 6 月 9 日发布了一个非周期版本——所有这一切的伟大之处在于它都是在公开的邮件列表中完成的,供大家查看!

    • 2

相关问题

  • 在 Windows 中安装默认 MySQL 表 (mysql_install_db)

  • 我正在对主机崩溃的 Oracle 数据库进行事后分析。我应该从哪里开始?

  • 异步描述符调整大小说明

  • 如何配置 PostgreSQL 9.0 在 Windows XP 下自动启动?

  • Oracle 可以在 Windows 上安装而不是管理员吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve