postgrel执行VACUUM报VACUUM cannot run inside a transaction block
在python脚本里执行:
1 sql_gp1 = "VACUUM dwd_access_record_inout_temp" 2 sql_gp2 = "delete from dwd_access_record_inout_temp t where t.indate > (select now()::timestamp-interval '36 hour')" 3 conn = gputil.connect(logger,target_host,target_user,target_password,target_db) 4 #gputil是自己导入pgdb写的模块 5 cur = conn.cursor() 6 cur.execute(sql_gp1) 7 cur.execute(sql_gp2) 8 conn.commit() 9报错: psycopg2.InternalError: VACUUM cannot run inside a transaction block 查阅资料: 官方文档: http://initd.org/psycopg/docs/connection.html#connection.autocommit

1 conn1 = gputil.connect(logger,target_host,target_user,target_password,target_db) 2 conn2 = psycopg2.connect(database=target_db, user=target_user, password=target_password,host=target_host) 3 # conn2.set_isolation_level(0) 如果psycopg是2.4.2版本前的,只能这样写 4 conn2.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) 5 6 cur1 = conn1.cursor() 7 cur2 = conn2.cursor() 8 9 cur2.execute(sql_gp1) 10 11 cur1.execute(sql_gp2) 12 conn1.commit() 13 14 os.system("python /application/datax2/bin/datax.py /root/test_hgm/access_record_process/dwd_inout_temp.json") 15 conn1.commit()
可能遇到的问题:
如果如下这样写,或者 或者自己用其他包写的conn2报下面的错了
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。1 conn2=gputil.connect(logger,target_host,target_user,target_password,target_db)

conn2 = psycopg2.connect(database=target_db, user=target_user,password = target_password,host=target_host)

更多精彩