GaussDB分区表DQL/DML业务报错
开启行迁移开关后,并发UPDATE/DELETE报错 关闭行迁移开关后,跨分区更新导致的报错 插入数据无法路由到已有分区导致的报错
报错场景
--UPDATE业务报错ERROR: partition table update conflictDETAIL: disable row movement of table can avoid this conflict--DELETE业务报错ERROR: partition table delete conflictDETAIL: disable row movement of table can avoid this conflict
原因分析
--开启分区表t1的行迁移开关ALTER TABLE t1 ENABLE ROW MOVEMENT;--关闭分区表t1的行迁移开关ALTER TABLE t1 DISABLE ROW MOVEMENT;
如果第一个操作是UPDATE,第二个操作能成功找到最新的数据,之后对新数据操作。 如果第一个操作是DELETE,第二个操作看到当前数据已经被删除而且找不到最新数据,就终止操作。 ii.对于数据跨分区结果,第一个操作执行完后,第二个操作会报错。 如果第一个操作是UPDATE,由于新数据在新分区中,第二个操作不能成功找到最新的数据,就无法操作,之后会报错。 如果第一个操作是DELETE,第二个操作看到当前数据已经被删除而且找不到最新数据,但无法判断删除旧数据的操作源于UPDATE还是DELETE。如果是UPDATE,报错处理。如果是DELETE,终止操作,为了保持数据的正确性,同样报错处理。
处理方法
报错场景
ERROR: fail to update partitioned table "t1"DETAIL: disable row movement
原因分析
处理方法
报错场景
原因分析
CREATE TABLE t1 (c1 integer,c2 integer)PARTITION BY RANGE (c1)(PARTITION p1 VALUES LESS THAN (100),PARTITION p2 VALUES LESS THAN (200))DISABLE ROW MOVEMENT;INSERT INTO t1 VALUES(1,1),(201,1);
CREATE TABLE t1 (c1 varchar,c2 integer)PARTITION BY RANGE (c1)(PARTITION p1 VALUES LESS THAN ('100'),PARTITION p2 VALUES LESS THAN ('200'))DISABLE ROW MOVEMENT;INSERT INTO t1 VALUES('9',1);
处理方法
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




