【发布时间】:2021-03-03 15:05:19
【问题描述】:
我将数据从 Postgres 迁移到 Redshift 并进行数据验证检查,因此将 MD5 用于完整行。 Postgres 到 Redshift 之间的视觉检查是可以的,但 Float8 数据类型的 MD5 值不同。
在 Postgres 中:
balance|md5(balance::VARCHAR)
-140.2|d59f47f21a88e8b73d4ca309d75cc64b
在红移中:
balance|md5(balance::VARCHAR)
-140.2|539dc58d834b1cf24252705b4f40b7f1
有人遇到这个问题吗?关于为什么会有这种差异的任何想法?迁移后是否有其他方法可以对跨数据库的所有行进行数据验证?
【问题讨论】:
-
在
numeric列上使用md5()是否也会显示此行为?如果不是,那么它可能是由于float是一个 近似 数据类型,并且 Redshift 和 Postgres 之间的实现在某种程度上有所不同(尽管亚马逊在他们的营销资料中声明,Redshift 不是 和 Postgres 一样) -
数字很好。仅与浮点值有关。
-
对迁移的数据进行行级数据验证有什么想法吗?
-
两个值都不对应
md5('-140.2'),因此您可能需要单独检查balance::VARCHAR。 -
我无法重现。也许你可以想出一个完整的可重现的测试用例。
标签: sql postgresql amazon-redshift md5 data-migration