繁体   English   中英

如何使用查询验证数据库迁移?

[英]How to verify a DB migration with a query?

使用 Postgres、SQL 开发人员和 dBeaver。

我需要通过扫描一系列列(准确地说是 36 列)来验证数据迁移,以确保从 36 列中提取两个唯一值。

迁移规则是:

  • 对于表中的每个 prg_id,按升序遍历所有 chan1..36 值
  • 将 chan1 值插入 schema.prg.vcn1 列
  • 遍历剩余的 CHAN(即 chan2、chan3 等)。 如果找到另一个唯一的 CHAN,则将其插入 vcn2 列。
  • 停止处理这个 prg_id 并继续下一个。

这一切都发生在同一个表 (schema.prg) 中。 数据示例如下所示。 后两列是我要正确填充的列。 下面的示例显示了成功的数据库迁移应该是什么样子(我有大约 4,500 行要验证)。

prg_id 陈1 陈2 陈3 ...chan36 vcn1 vcn2
5100 100 100 262 0 100 262
3252 43 43 52 52 43 52
4272 76 null null null 76 0

我试图用 CASE 语句查询,但无法正确查询。 任何帮助表示赞赏。

您可以使用横向连接按顺序获取唯一 ID:

select t.*, c.chans
from t cross join lateral
     (select array_agg(chan order by ord) as chans
      from (select chan, min(ord) as ord
            from (values (1, t.chan1), (2, t.chan2), . . . ) v(ord, chan)
            where chan <> 0
            group by chan
           ) c
     ) c;

我不确定您为什么想要可变数量的列。 该数组应该做你想做的。 您可以使用数组表示法访问数组的元素: chans[1] as vcn1, chans[2] as vcn2, . . . chans[1] as vcn1, chans[2] as vcn2, . . . .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM