我的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的任何行是否已被更改。我不想知道,究竟发生了什么变化。
答案 0 :(得分:3)
最简单的方法 - 只需将所有字符串形式md5
与string_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