如何在postgresql中获得整个表的校验和?

hk8txs48  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(123)

我的java 11+ apache jmeter应用程序向Postgresql数据库中抛出了一定的负载(插入,更新)以进行负载测试。
所有更改都复制到另一个数据库,我将有一个数据更改的表列表。所有更改完成后,必须比较所有表以验证复制是否正确。这可以通过以下方式完成:

SELECT        
    md5(CAST((array_agg(f.* order by id))AS text)) 
FROM
    foo f;

字符串
或者连接表中的所有行并从中获得哈希值,但对于大型表,这将花费很长时间。请告诉我是否有一种方法可以最佳地做到这一点?

8nuwlpux

8nuwlpux1#

你可以通过使用并行哈希来解决这个问题。分割和征服-将大表分成更小的块并并发计算校验和以获得更好的性能。
并行哈希的示例实现,您可以用途:

WITH chunks AS (
    SELECT id, md5(CAST((array_agg(f) ORDER BY f.id) AS text)) AS chunk_hash
    FROM foo f
    GROUP BY id % 4
)
SELECT md5(CAST(array_agg(chunk_hash) AS text)) FROM chunks;

字符串
希望这对你有帮助。

相关问题