【问题标题】:How to verify a DB migration with a query?如何使用查询验证数据库迁移?
【发布时间】:2021-06-21 11:50:12
【问题描述】:

使用 Postgres、SQL Developer 和 dBeaver。

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

迁移的规则是:

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

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

prg_id chan1 chan2 chan3 ...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 语句进行查询,但无法正确处理。任何帮助表示赞赏。

【问题讨论】:

  • 修复你的数据模型!像这样连续存储值非常麻烦!

标签: sql postgresql dbeaver


【解决方案1】:

您可以使用横向连接按顺序获取唯一 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, . . .

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多