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



使用Postgres、SQL Developer和dBeaver。

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

迁移的规则是:

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

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

>通道3。。。chan36>vcn2100null
prg_id 通道1 通道2vcn1
5100 100 262 0262
3252 43 43
4272 76 null760

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

最新更新