CHECKSUM TABLE

功能描述

计算表数据校验和。

注意事项

  • 不支持QUICK模式(返回NULL)。
  • 对于非普通表(例如视图)、不存在的表均返回NULL。
  • 不支持与异构数据库的表校验和的可比性。 (例如对于相同数目,在opengauss和mysql中查询结果无法对比)。
  • 非QUICK模式的校验和计算基于查询结果子串,暂不支持针对列的数据类型的区分。

语法格式

  1. CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]

参数说明

  • tbl_name

    表名,可指定表名。也可以指定schema_name.table_name。

  • [QUICK | EXTENDED]

    校验模式,只支持EXTENDED(也即默认值)。

示例

  1. --创建简单表
  2. openGauss=# CREATE SCHEMA tst_schema1;
  3. openGauss=# SET SEARCH_PATH TO tst_schema1;
  4. opengauss=# CREATE TABLE tst_t1
  5. (
  6. id int,
  7. name VARCHAR(20),
  8. addr text,
  9. phone text,
  10. addr_code text
  11. );
  12. opengauss=# CREATE TABLE tst_t2 AS SELECT * FROM tst_t1;
  13. INSERT 0 0
  14. --不同插入顺序校验
  15. opengauss=# INSERT INTO tst_t1 values(2022001, 'tst_name1', 'tst_addr1', '15600000001', '000001');
  16. INSERT INTO tst_t1 values(2022002, 'tst_name2', 'tst_addr2', '15600000002', '000002');
  17. INSERT INTO tst_t1 values(2022003, 'tst_name3', 'tst_addr3', '15600000003', '000003');
  18. INSERT INTO tst_t1 values(2022004, 'tst_name4', 'tst_addr4', '15600000004', '000004');
  19. INSERT INTO tst_t2 (SELECT * FROM tst_t1 ORDER BY id DESC);
  20. opengauss=# checksum table tst_t1,tst_t2,xxx;
  21. Table | Checksum
  22. --------------------+------------
  23. tst_schema1.tst_t1 | 1579899754
  24. tst_schema1.tst_t2 | 1579899754
  25. tst_schema1.xxx | NULL
  26. --含大段字段的表测试
  27. opengauss=# CREATE TABLE blog
  28. (
  29. id int,
  30. title text,
  31. content text
  32. );
  33. opengauss=# CREATE TABLE blog_v2 AS SELECT * FROM blog;
  34. opengauss=# INSERT INTO blog values(1, 'title1', '01234567890'), (2, 'title2', '0987654321');
  35. opengauss=# CREATE OR REPLACE FUNCTION loop_insert_result_toast(n integer)
  36. RETURNS integer AS $$
  37. DECLARE
  38. count integer := 0;
  39. BEGIN
  40. LOOP
  41. EXIT WHEN count = n;
  42. UPDATE blog SET content=content||content where id = 2;
  43. count := count + 1;
  44. END LOOP;
  45. RETURN count;
  46. END; $$
  47. LANGUAGE PLPGSQL;
  48. opengauss=# select loop_insert_result_toast(16);
  49. loop_insert_result_toast
  50. --------------------------
  51. 16
  52. opengauss=# INSERT INTO blog_v2 (SELECT * FROM blog);
  53. opengauss=# checksum table blog,blog_v2;
  54. Table | Checksum
  55. ---------------------+------------
  56. tst_schema1.blog | 6249493220
  57. tst_schema1.blog_v2 | 6249493220
  58. --段页式表测试
  59. opengauss=# CREATE TABLE tst_seg_t1(id int, name VARCHAR(20)) WITH (segment=on);
  60. opengauss=# CREATE TABLE tst_seg_t2(id int, name VARCHAR(20)) WITH (segment=on);
  61. opengauss=# INSERT INTO tst_seg_t1 values(2022001, 'name_example_1');
  62. INSERT INTO tst_seg_t1 values(2022002, 'name_example_2');
  63. INSERT INTO tst_seg_t1 values(2022003, 'name_example_3');
  64. opengauss=# INSERT INTO tst_seg_t2 (SELECT * FROM tst_seg_t1);
  65. opengauss=# checksum table tst_seg_t1,tst_seg_t2;
  66. Table | Checksum
  67. ------------------------+------------
  68. tst_schema1.tst_seg_t1 | 5620410817
  69. tst_schema1.tst_seg_t2 | 5620410817