数据仓库服务 GAUSSDB(DWS)-聚集函数:checksum(expression)

时间:2024-04-18 16:25:13

checksum(expression)

描述:返回所有输入值的CHECKSUM值。使用该函数可以用来验证GaussDB(DWS)数据库(不支持GaussDB(DWS)之外的其他数据库)的备份恢复或者数据迁移操作前后表中的数据是否相同。在备份恢复或者数据迁移操作前后都需要用户通过手工执行SQL命令的方式获取执行结果,通过对比获取的执行结果判断操作前后表中的数据是否相同。

  • 对于大表,CHECKSUM函数可能会需要很长时间。
  • 如果某两表的CHECKSUM值不同,则表明两表的内容是不同的。由于CHECKSUM函数中使用散列函数不能保证无冲突,因此两个不同内容的表可能会得到相同的CHECKSUM值,存在这种情况的可能性较小。对于列进行的CHECKSUM也存在相同的情况。
  • 对于时间类型timestamp, timestamptz和smalldatetime,计算CHECKSUM值时请确保时区设置一致。
  • 若计算某列的CHECKSUM值,且该列类型可以默认转为TEXT类型,则expression为列名。
  • 若计算某列的CHECKSUM值,且该列类型不能默认转为TEXT类型,则expression为列名::TEXT。
  • 若计算所有列的CHECKSUM值,则expression为表名::TEXT。

可以默认转换为TEXT类型的类型包括:char, name, int8, int2, int1, int4, raw, pg_node_tree, float4, float8, bpchar, varchar, nvarchar2, date, timestamp, timestamptz, numeric, smalldatetime,其他类型需要强制转换为TEXT。

返回类型:numeric

示例:

表中可以默认转为TEXT类型的某列的CHECKSUM值:

1
2
3
4
5
SELECT CHECKSUM(inv_quantity_on_hand) FROM tpcds.inventory;
     checksum      
-------------------
 24417258945265247
(1 row)

表中不能默认转为TEXT类型的某列的CHECKSUM值(注意此时CHECKSUM参数是列名::TEXT):

1
2
3
4
5
SELECT CHECKSUM(inv_quantity_on_hand::TEXT) FROM tpcds.inventory;
     checksum      
-------------------
 24417258945265247
(1 row)

表中所有列的CHECKSUM值。注意此时CHECKSUM参数是表名::TEXT,且表名前不加Schema:

1
2
3
4
5
SELECT CHECKSUM(inventory::TEXT) FROM tpcds.inventory;                    
     checksum      
-------------------
 25223696246875800
(1 row)
support.huaweicloud.com/sqlreference-830-dws/dws_06_0046.html