• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

GPDBcurrenttransactionisaborted

mysql 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论

在用Python操作GPDB的时候遇到报错如下 gpmg.manager_tabl1eerror ‘ERROR: relation gpmg.manager_tabl1e does not exist’ in ‘select pg_total_relation_size(‘gpmg.manager_tabl1e’);’gpmg.manager_tableerror ‘ERROR: current transaction is aborted, co

在用Python操作GPDB的时候遇到报错如下

gpmg.manager_tabl1eerror 'ERROR:  relation "gpmg.manager_tabl1e" does not exist' in 'select pg_total_relation_size('gpmg.manager_tabl1e');'gpmg.manager_tableerror 'ERROR:  current transaction is aborted, commands ignored until end of transaction block' in 'select pg_total_relation_size('gpmg.manager_table');'

这个在一个循环当中,收集对象大小并插入结果表,出现这个错误的原因是因为在GPDB中如果有出现任何错误,将导致后续的会话报错。

Python代码块如下

sql = "select v1,v2,v3 from test order by 2"cur.execute(sql)for ret in cur.fetchall():    v_schemaname = ret[0]    v_tablename = ret[1]    v_tableowner = ret[2]    v_object = v_schemaname + "." + v_tablename    try:        cur.execute("select pg_total_relation_size('" + v_object + "');")        v_totalsize = cur.fetchone()[0]        cur.execute("insert into gpmg.table_size_info (ctime,schemaname,tablename,tableowner,totalsize) values(%s,%s,%s,%s,%s)", (ctime,v_schemaname,v_tablename,v_tableowner,v_totalsize))    except Exception, e:        print v_object        print e

改进之后如下

try:    for ret in cur.fetchall():        v_schemaname = ret[0]        v_tablename = ret[1]        v_tableowner = ret[2]        v_object = v_schemaname + "." + v_tablename        try:            cur.execute("select pg_total_relation_size('" + v_object + "');")            v_totalsize = cur.fetchone()[0]            cur.execute("insert into gpmg.table_size_info (ctime,schemaname,tablename,tableowner,totalsize) values(%s,%s,%s,%s,%s)", (ctime,v_schemaname,v_tablename,v_tableowner,v_totalsize))            db.commit()        except Exception, e:            db.commit()            print v_object, '--', e            continueexcept Exception, e:    pass    finally:    db.commit()    db.close()    os.system('rm -rf ' + pf)

这样就算比较完美咯。

-EOF-

本文来源gao!%daima.com搞$代*!码$网3


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:GPDBcurrenttransactionisaborted
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址