找出一组行的哈希值

时间:2012-11-25 18:57:54

标签: postgresql

我的PostgresSQL数据库中有一个表person,其中包含不同用户的数据。

我需要编写一个测试用例,它确保某些例程可以修改用户1的数据,而不会修改用户2的数据。

为此目的,我需要

a)计算用户1和用户2的所有行的哈希码,

b)然后执行测试中的操作,

c)再次计算哈希码并

d)比较步骤a)和c)中的哈希码。

我找到了一个way来计算单行的哈希码:

SELECT md5(CAST((f.*)AS text))
FROM person f;

为了实现我的目标(找出用户2的行是否已被更改),我需要执行这样的查询:

SELECT user_id, SOME_AGGREGATE_FUNCTION(md5(CAST((f.*)AS text)))
FROM person f
GROUP BY user_id;

我可以使用什么聚合函数来计算一组行的哈希码?

注意:我只想知道用户2的任何行是否已被更改。我不想知道,究竟发生了什么变化。

2 个答案:

答案 0 :(得分:3)

最简单的方法 - 只需将所有字符串形式md5string_agg连接起来。但要正确使用此聚合,您必须指定ORDER BY

或者对md5(string_agg(md5(CAST((f.*)AS text)),''))使用ORDER BY - 如果f.*的任何字段发生变化且比较便宜,它就会发生变化。

答案 1 :(得分:1)

更简单的方法

SELECT user_id, md5(textin(record_out(A))) AS hash
FROM person A