2

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

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

为此,我需要

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

b) 然后执行被测操作,

c) 再次计算哈希码并

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

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

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 的任何行是否已更改。我不想知道,到底发生了什么变化。

4

2 回答 2

4

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

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

于 2012-11-25T19:22:28.957 回答
1

一种更简单的方法

SELECT user_id, md5(textin(record_out(A))) AS hash
FROM person A
于 2016-02-20T07:16:44.310 回答