2010-10-07 181 views
15

有没有办法在postgresql中获取某一行的哈希码?在postgresql中查找行的哈希值

我只需要导出一些数据,如果最后一次导出后数据发生了一些变化,最后导出的数据行可以存储在一个表中,当我需要导出数据时,我可以得到所有数据的散列值以及仅导出具有与上次导出不同的散列值的那些行。

是否有可能实现使用postgresql?

谢谢

回答

29

铸行文字,并使用MD5进行哈希:

SELECT 
    md5(CAST((f.*)AS text)) 
FROM 
    foo f; 
+4

或者更短'SELECT md5(f :: text)FROM f' – Jelen 2017-03-29 10:10:12

3

另一种方法是设置一个ON INSERT OR UPDATE trigger这将插入当前时间戳到一个last_modified列,然后简单地查询基于此列当你的导入过程中运行。

+0

我面对的是我工作的遗留系统上的问题,其中的数据可以来自进口或通过添加/对所有数据编辑页面和最后修改的列是不可靠的。这就是我正在检查某种散列技术来检查是否有任何更改的原因。 – 2010-10-07 06:34:22

+1

通过这种方法,数据库触发器将确定并写入'last_modified'时间 - 而不是将数据放入此表中的客户端。客户不会知道这个专栏,也不应该 - 你的数据库会自己管理它。 – 2010-10-07 14:20:45