我想要一种相当有效的方法将整个表压缩为哈希值
我有一些工具可以生成整个数据表,然后可以用来生成更多的表,等等。我试图实现一个简单的构建系统来协调构建运行并避免重复工作。我希望能够记录输入表的哈希值,以便稍后检查它们是否已更改。构建一个表需要几分钟或几小时,因此花几秒钟构建哈希是可以接受的
我使用的一种方法是将pg_dump的输出通过管道传输到md5sum,但这需要通过网络传输整个表转储,以便将其散列到本地框中。理想情况下,我希望在数据库服务器上生成哈希
在postgresql中查找一行的散列值为我提供了一种每次计算一行的散列值的方法,然后可以以某种方式进行组合
任何提示都将不胜感激
编辑以发布我的最终结果:tinychen的回答对我没有直接作用,因为我显然不能使用“plpgsql”。相反,当我在SQL中实现该函数时,它工作正常,但对于大型表来说效率非常低。因此,我没有将所有行哈希连接起来,然后对其进行哈希处理,而是转而使用“滚动哈希”,将前一个哈希与行的文本表示连接起来,然后对其进行哈希处理以生成下一个哈希。这样好多了;显然,在短字符串上额外运行数百万次md5比将短字符串连接数百万次要好
创建函数zz_concat(文本,文本)将文本返回为
'选择md5($1 | |$2);'语言“sql”;
创建聚合zz_hashagg(文本)(
sfunc=zz_concat,
stype=文本,
initcond='';
我知道这是一个老问题,但这是我的解决方案:
选择
md5(CAST((array_agg(f.*order by id))作为文本))/*id是表的主键(以避免随机排序)*/
从…起
福福;