找出一组行的哈希值

DP_*_*DP_ 1 postgresql

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

我需要编写一个测试用例,确保某个例程确实修改用户1的数据,并且不修改用户2的数据。

为此,我需要

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

b) 然后执行被测操作,

c) 再次计算哈希码并

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

我找到了一种计算单行哈希码的方法:

SELECT md5(CAST((f.*)AS text))
FROM person f;
Run Code Online (Sandbox Code Playgroud)

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

SELECT user_id, SOME_AGGREGATE_FUNCTION(md5(CAST((f.*)AS text)))
FROM person f
GROUP BY user_id;
Run Code Online (Sandbox Code Playgroud)

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

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

Igo*_*nko 5

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

或者md5(string_agg(md5(CAST((f.*)AS text)),''))与某些一起使用ORDER BY- 如果任何领域发生f.*变化,它都会改变,并且比较起来很便宜。