比较表中的行对

2024-02-28

我可以在比较同一个表中的行的查询上使用一些补救帮助。我正在修改我们的代码以推送到 Postgres,并建立了一个测试床来使用我们的旧代码和新代码进行推送。行数很好,但这并不能告诉我数据是否相同。为此,我意识到我可以使用内置功能来获取行的哈希值。这是我的一个简单表格作为开始:

CREATE TABLE IF NOT EXISTS data.hsys (
    "id" uuid NOT NULL DEFAULT NULL,
    "marked_for_deletion" boolean NOT NULL DEFAULT false,
    "name_" citext NOT NULL DEFAULT NULL,

CONSTRAINT hsys_id_pkey
    PRIMARY KEY ("id")
);

然后哈希仅采用这一行:

select hashtext(hsys::text) from hsys;

我想要做的是在每次测试推送到一个小表后将每行的 ID、哈希值、代码版本和表名称存储起来:

CREATE TABLE IF NOT EXISTS data.row_check (
    id         uuid NOT NULL DEFAULT NULL,
    version    int8 NOT NULL DEFAULT NULL,
    row_hash   int8 NOT NULL DEFAULT NULL,
    table_name text NOT NULL DEFAULT NULL,

CONSTRAINT row_check_pkey
    PRIMARY KEY (id, version)
);

将数据插入 row_check 并不难。概念验证查询如下所示:

select 
   id,
    0 as version,
    hashtext(hsys::text)  as row_hash,
   'hsys' as table_name,
from hsys;

有效的插入查询如下所示:

INSERT INTO row_check (id,version,row_hash,table_name)
            SELECT id, 0, hashtext(hsys::text),'hsys' 
            FROM hsys

            ON CONFLICT ON CONSTRAINT row_check_pkey DO UPDATE SET
                row_hash   = EXCLUDED.row_hash,
                table_name = EXCLUDED.table_name;

数据到位后,我可以看到如下内容:

select * from row_check
order by 1,2
limit 6;

id                                    version   row_hash    table_name
17ea1ed4-87b0-0840-912f-d29de2a06f5d    0      -1853961325  hsys
17ea1ed4-87b0-0840-912f-d29de2a06f5d    1      -1853961325  hsys
2200d1da-73e7-419c-9e4c-efe020834e6f    0      -482794730   hsys
2200d1da-73e7-419c-9e4c-efe020834e6f    1       482794730   hsys   <--- Different from version 0
47f4a50e-2358-434b-b30d-1f707ea9ee1b    0      -1539190835  hsys
47f4a50e-2358-434b-b30d-1f707ea9ee1b    1      -1539190835  hsys

我最希望从这样的样本中得到的是:

table_name id                                       v0         v1
hsys       2200d1da-73e7-419c-9e4c-efe020834e6f 0   -482794730  482794730

但即使是这个最小的结果也会有帮助:

2200d1da-73e7-419c-9e4c-efe020834e6f    hsys

这就是我被难住的地方。我想要构建的是对 row_check 的查询,该查询可以发现版本之间哈希值不同的任何 ID。我有上面的版本0和1。有人可以指出我正确的分组和/或加入方向,以仅获取跨版本不匹配的行吗?这些是我需要发现和追踪的危险信号。我确实需要返回 ID 和表名,版本和哈希值是次要的。我对此有一些限制,其中一些有帮助:

  • ID 值在所有表中都是唯一的。

  • 我一次只会比较两个版本。

  • 我有几十个表要测试。

  • 有些表有数百万行。

最后一点可能很重要。我想用SELECT DISTINCT id在 CTE 中,但我并没有走得太远。

谢谢你的建议。


一旦你有了 row_check 表,你就可以通过这种方式加入表

 select a.id
      , a.version
      , a.row_hash
      , b.id
      , b.version
      , b.row_hash      
from row_check a 
INNER JOIN row_check b on a.id = b.id  
  AND a.version = 0 
    AND b.version  = 1 
      AND a.row_hash <> b.row_hash
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较表中的行对 的相关文章

随机推荐

  • 使用 iframe 时遇到问题

    我在使用 iframe 时遇到了严重的失败 我需要一些帮助 我以前从未使用过 iframe 这是我第一次 这是一个关于我试图遵循的文档来生成带有 Galleria 滑块的 iframe http galleria io docs refer
  • css 代码不适用于 ionic 2 中的按钮

    一般来说 我对离子和混合应用程序很陌生 在插入和使用奶嘴应用程序时 我没有看到任何 CSS 工作 我究竟做错了什么 这是我的文件 测试 scss test button inner width 20 important margin 30p
  • 使用 reshape2 将两组柱从宽形式熔化为长形式[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下方法将时变预测器添加到长格式数据帧中reshape2 melt但我想知道是否有更快的方法 这是广泛形式的玩具数据 在不同访问 时间点采取三种结果变量测量 会话 1 会话 2 和会话 3 对于每个
  • Mongoose 自定义密码验证

    我正在尝试使用猫鼬制作架构 并陷入如何对密码应用自定义验证的问题 其中密码包含 一个特殊字符 密码应包含 1 个小写字母和 1 个大写字母 密码长度应大于6 这是架构 const mongoose require db mongoose c
  • 在 WebKit 上的 Mac OS 应用程序中启用 WebGL

    我正在为 Mac OS 编写一个应用程序 WebKit 上的浏览 器 用于 WebGL 上的某些网站 一切准备就绪 应用程序可以正确显示正常的 HTML 站点 但 WebGL 不起作用 如何在我的应用程序中启用 WebGL 一旦有了 Web
  • mvn archetype:generate 和 mvn archetype:create 之间有什么区别

    这两者有什么区别吗 archetype create是旧的且已弃用的形式 需要在启动时定义所有属性 而archetype generate是更新 更舒适的方式 archetype generate 了解列出原型的目录 并可以询问您缺少的属性
  • 当两个链接的 static_cast 可以完成它的工作时,为什么我们在 C++ 中需要 reinterpret_cast 呢?

    说我想投A to char 反之亦然 我们有两种选择 我的意思是 我们很多人认为我们有两种选择 because两者似乎都有效 因此造成混乱 struct A int age char name 128 A a char buffer sta
  • 解析错误:“导入”和“导出”可能仅与“sourceType:模块”一起出现

    我目前正在使用 Google Cloud Functions 和 Firestore 但是当我尝试从父文档获取数据时遇到了问题 我在互联网上搜索了这个问题 但似乎建议的修复方法都不适合我 以下是我尝试部署时在终端中得到的内容 Users m
  • 使用 Let 加密的多个子域

    我有一条有吸引力的消息 表明不幸的是不可能为多个子域生成证书 Wildcard domains are not supported mynewsiteweb com 另一方面 可以为每个子域逐一生成它 有更好的解决方案吗 谢谢 Edit 现
  • Android ConstraintLayout 中的 z 顺序有问题

    我正在尝试使用设计一个注册屏幕ConstraintLayout除了 Z 顺序之外 一切都很顺利 当用户单击 注册 时 我需要在所有内容之上显示一个 FrameLayout 但它不起作用 请检查屏幕截图
  • 继承:限制而不是扩展? [复制]

    这个问题在这里已经有答案了 假设您有一个 UIView 子类 您定义一个 init 方法 myInitWithFrame andWhatNot 你知道你不会使用从 UIView 继承的 init 方法ever并且您的自定义 init 方法会
  • 什么是高通和低通滤波器?

    图形和音频编辑处理软件通常包含称为 高通滤波器 和 低通滤波器 的功能 它们到底有什么作用 以及实现它们的算法是什么 以下是使用卷积实现低通滤波器的方法 double signal some 1d signal double filter
  • 使用 Flask 调用 connection.commit() 后 MySQL 未更新(工作中)

    我正在使用 Flask 构建一个简单的 Web 应用程序 但无论出于何种原因 conn commit 都没有将数据提交到数据库中 我知道这一点是因为当我手动向数据库添加某些内容时 数据不会更改 但每次测试时 ID 部分都会增加 因为它使用自
  • 反应本机路由器 Actions.SCENE 不执行任何操作

    我正在向我的应用程序添加一个简单的登录屏幕 但一旦用户通过身份验证 我将无法调用 Actions home 我有一个按钮 按下该按钮时 会调用一个函数来连接到服务器并获取身份验证状态 成功后 我会调用 Actions home 但什么也没发
  • HTML 脚本标签放置?

    每隔一段时间我就会听说要放置 HTML
  • 为什么从 sqlalchemy 调用的存储过程不起作用,但从工作台调用却起作用?

    我有一个存储过程 通过 MySQL Workbench 调用它 如下工作 CALL lobdcapi escalatelobalarm A0001 但不是来自 python 程序 意味着它不会抛出任何异常 进程默默地完成执行 如果我在列名中
  • 如何在 Grails 集成测试中制作两个内容不同的帖子

    我正在测试一个控制器 我无法发表两个内容不同的帖子 下面是一个示例 其中我使用一些数据 post1 使用 json1 执行到 cardController 的发布 然后 我使用不同的数据执行另一篇文章 post2 和 json2 但我无法成
  • 鼠标悬停时出现棘手的延迟

    这就是我目前所拥有的 cart summary mouseenter function flycart delay 500 slideDown fast flycart mouseleave function flycart delay 5
  • SQL Server 查询:使用 JOIN 包含 NULL 值

    我需要有关以下 SQL Server 查询的帮助 其中列 a TAProfileID 和 c CountryCode 在数据库中具有 NULL 值 我希望我的 JOIN 语句返回 NULL 值 如果存在 SELECT a Reservati
  • 比较表中的行对

    我可以在比较同一个表中的行的查询上使用一些补救帮助 我正在修改我们的代码以推送到 Postgres 并建立了一个测试床来使用我们的旧代码和新代码进行推送 行数很好 但这并不能告诉我数据是否相同 为此 我意识到我可以使用内置功能来获取行的哈希