我的 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的任何行是否被更改。我不想知道到底发生了什么变化。
最简单的方法 - 只需将所有字符串形式md5与string_agg. 但要正确使用此聚合,您必须指定ORDER BY.
或者md5(string_agg(md5(CAST((f.*)AS text)),''))与某些一起使用ORDER BY- 如果任何领域发生f.*变化,它都会改变,并且比较起来很便宜。
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |