暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

磐维gs_dumpall执行报错ERROR: current transaction is aborted, commands ignored until end of transaction block

王贝 2025-07-13
130

问题概述

客户准备使用逻辑导入导出方式进行数据迁移,从3.1.0版本迁移到另一套3.1.0版本,执行gs_dumpall命令备份时报错

pw_dump: [port='17700'] [dbname='app_information_db'] [archiver (db)] [2025-06-22 00:17:10] query failed: ERROR:  current transaction is aborted, commands ignored until end of transaction block, firstChar[Q]
pw_dump: [port='17700'] [dbname='app_information_db'] [archiver (db)] [2025-06-22 00:17:10] query was: SELECT pg_attrdef.tableoid, pg_attrdef.oid, pg_attrdef.adnum, pg_catalog.pg_get_expr_nocoll_b(adbin, adrelid)AS adsrc, adgencol AS generatedCol, pg_catalog.pg_get_expr(adbin_on_update, adrelid) AS adsrc_on_update FROM pg_catalog.pg_attribute inner join pg_catalog.pg_attrdef on attrelid = adrelid and adnum = attnum WHERE adrelid = '200982697'::pg_catalog.oid

问题原因

执行上面报错sql pg_catalog.pg_get_expr_nocoll_b,当执行内部sql  SELECT pg_attrdef.tableoid, pg_attrdef.oid, pg_attrdef.adnum, pg_catalog.pg_get_expr_nocoll_b(adbin, adrelid)AS adsrc, adgencol AS generatedCol, pg_catalog.pg_get_expr(adbin_on_update, adrelid) AS adsrc_on_update FROM pg_catalog.pg_attribute inner join pg_catalog.pg_attrdef on attrelid = adrelid and adnum = attnum WHERE adrelid = '200982697'::pg_catalog.oid时报缺失函数pg_catalog.pg_get_expr_nocoll_b

经查看发现该环境里确实没有函数pg_catalog.pg_get_expr_nocoll_b。

正常的一套3.1.0版本是有pg_catalog.pg_get_expr_nocoll_b函数的,执行上面的sql也不会报错。

经和客户确认,该环境以前是从另外一套2.0.2版本的库通过物理备份方式恢复出来的,由于版本不一致导致恢复出来的这套环境缺失了函数pg_catalog.pg_get_expr_nocoll_b。物理备份恢复需要在同版本数据库之间才能使用,正是由于客户之前不规范的操作,导致了此次问题的出现。

解决方案

在当前 310库,用gs_probackup做物理备份;
将物理备份通过gs_restore导入到一套新的 202库中;
在 202库,使用gs_dumpall逻辑备份导出;
将逻辑备份导入到目标 310库。

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论