如何在postgresql中获取整个表的哈希值?

如何在postgresql中获取整个表的哈希值?,第1张

概述我想要一个相当有效的方法来将整个表格集中到哈希值. 我有一些工具可以生成整个数据表,然后可以用它来生成更多的表,等等.我试图实现一个简单的构建系统来协调构建运行并避免重复工作.我想要能够记录输入表的哈希值,以便稍后检查它们是否已更改.建立桌子需要几分钟或几个小时,所以花费几秒钟的建筑散热是可以接受的. 我使用的一个黑客是将pg_dump的输出管道传输到md5sum,但是这需要通过网络传输整个表转储 我想要一个相当有效的方法来将整个表格集中到哈希值.

我有一些工具可以生成整个数据表,然后可以用它来生成更多的表,等等.我试图实现一个简单的构建系统来协调构建运行并避免重复工作.我想要能够记录输入表的哈希值,以便稍后检查它们是否已更改.建立桌子需要几分钟或几个小时,所以花费几秒钟的建筑散热是可以接受的.

我使用的一个黑客是将pg_dump的输出管道传输到md5sum,但是这需要通过网络传输整个表转储,以便在本地框上进行散列.理想情况下,我想在数据库服务器上生成哈希值.

Finding the hash value of a row in postgresql给了我一次计算一行的哈希的方法,然后可以以某种方式组合.

任何提示将不胜感激.

编辑发布我最终的结论:tinychen的答案没有为我直接工作,因为我不能使用’plpgsql’显然.当我在sql中实现这个功能时,它起作用,但对于大型表来说效率很低.所以不是连接所有的行哈希然后哈希,所以我切换到使用“滚动哈希”,其中先前的哈希与一行的文本表示形式连接,然后散列以产生下一个哈希.这好多了显然,在短串上运行md5,数百万次额外的时间比串连短串数百万次更好.

create function zz_concat(text,text) returns text as     'select md5( || );' language 'sql';create aggregate zz_hashagg(text) (    sfunc = zz_concat,stype = text,initcond = '');
只是这样做来创建哈希表聚合函数.
create function pg_concat( text,text ) returns text as 'begin    if  isnull then        return ;    else       return  || ;    end if;end;' language 'plpgsql';create function pg_concat_fin(text) returns text as 'begin    return ;end;' language 'plpgsql';create aggregate pg_concat (    basetype = text,sfunc = pg_concat,finalfunc = pg_concat_fin);

那么您可以使用pg_concat函数来计算表的哈希值.

select md5(pg_concat(md5(CAST((f.*)AS text)))) from f order by ID
总结

以上是内存溢出为你收集整理的如何在postgresql中获取整个表的哈希值?全部内容,希望文章能够帮你解决如何在postgresql中获取整个表的哈希值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1169757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存