如何在 postgres 中散列整个 table?

How to hash an entire table in postgres?

我想获取整个 table 中数据的哈希值。我需要在迁移后比较两个数据库以验证数据迁移是否成功。是否可以可靠且可重复地为数据库中的整个 table 生成哈希?

您可以从命令行执行此操作(当然替换 my_databasemy_table):

psql my_database -c 'copy my_table to stdout' |sha1sum

如果要使用查询来限制列数、添加排序等,修改查询即可:

psql my_database -c 'copy (select * from my_table order by my_id_column) to stdout' |sha1sum

请注意,除了列 data 之外,这不会散列任何内容。没有架构信息、约束、索引、元数据、权限等

另请注意,sha1sum 是一个任意散列程序;您可以将其通过管道传递给任何生成哈希的程序。一些 cuspy 选项是 sha256summd5sum