Yugabyte 2.7.1.1插入数据部分字段变为0问题排查求助
以下是针对该问题的分步排查方案:
检查表结构与默认值配置
先确认异常字段的默认值是否被错误设置为0,执行:SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name = 'xxl_job_info' AND column_name IN ('trigger_last_time', 'trigger_next_time');对比同结构正常表的字段配置,确保数据类型、默认值完全一致。同时验证自增序列与表字段的绑定关系:
SELECT pg_get_serial_sequence('xxl_job_info', 'id'); -- 替换为你的自增字段名确认返回的序列名称与你创建的序列一致,避免旧序列残留绑定。
清理元数据缓存
由于删表重建后问题复现,大概率是元数据缓存未失效。执行YugabyteDB的元数据失效命令:yb-admin invalidate_metadata ysql.your_schema.xxl_job_info -- 替换为你的schema名称执行后重新连接数据库,再次测试插入操作。同时查看master节点日志,排查元数据操作异常:
grep "xxl_job_info" /path/to/yugabyte/master/logs/yb-master.*.INFO重点关注是否有元数据创建、清理失败的报错信息。
验证显式赋值插入
跳过默认值,显式为异常字段赋值测试:INSERT INTO xxl_job_info (..., trigger_last_time, trigger_next_time) VALUES (..., CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); -- 或对应类型的合法值如果显式赋值后字段正常,说明问题出在默认值或字段约束;如果仍然被置0,需检查字段类型与插入值的兼容性,比如是否将TIMESTAMP类型字段误传为数值0。
排查隐藏触发器/规则
检查表是否存在未清理的触发器,可能在插入时强制修改字段值:SELECT tgname, pg_get_triggerdef(oid) FROM pg_trigger WHERE tgrelid = 'xxl_job_info'::regclass;同时检查是否存在表级规则(Rule):
SELECT rulename, pg_get_ruledef(oid) FROM pg_rewrite WHERE ev_class = 'xxl_job_info'::regclass;若发现可疑触发器或规则,可临时禁用后再次测试插入。
隔离命名空间测试
在集群内创建新的命名空间(Schema),重新创建xxl_job_info表并测试插入:CREATE SCHEMA test_new_schema; CREATE TABLE test_new_schema.xxl_job_info (...); -- 同原表结构如果新Schema下的表插入正常,说明原Schema存在元数据残留问题,可尝试备份数据后删除原Schema再重建。
核对版本已知问题
YugabyteDB 2.7.1.1属于较旧版本,存在部分元数据缓存、字段默认值处理的已知bug。可查阅该版本的release notes,确认是否有与表重建后字段异常相关的修复记录,必要时考虑升级到更高稳定版本验证。
内容的提问来源于stack exchange,提问作者kevin_chen

