在python脚本里执行

    sql_gp1 = "VACUUM dwd_access_record_inout_temp"
sql_gp2 = "delete from dwd_access_record_inout_temp t where t.indate > (select now()::timestamp-interval '36 hour')"
conn = gputil.connect(logger,target_host,target_user,target_password,target_db)
#gputil是自己导入pgdb写的模块
cur = conn.cursor()
cur.execute(sql_gp1)
cur.execute(sql_gp2)
conn.commit()
报错
    psycopg2.InternalError: VACUUM cannot run inside a transaction block
    
查阅资料
   
 报错的原因是:Psycopg2 会开启一个 新的 transaction 在每次调用 execute()时,而VACUUM需要在transaction之外执行,所以我们需要打开一个 autocommit connection 去执行 vacuum。
    
    
修改后代码:

 conn1 = 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)
# conn2.set_isolation_level(0) 如果psycopg是2.4.2版本前的,只能这样写
conn2.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) cur1 = conn1.cursor()
cur2 = conn2.cursor() cur2.execute(sql_gp1) cur1.execute(sql_gp2)
conn1.commit() os.system("python /application/datax2/bin/datax.py /root/test_hgm/access_record_process/dwd_inout_temp.json")
conn1.commit()

  可能遇到的问题

    如果如下这样写,或者 或者自己用其他包写的conn2报下面的错了

conn2=gputil.connect(logger,target_host,target_user,target_password,target_db)

 
    用psycopg2包(pgdb包也是调用的psycopg2)调用connect()
conn2 = psycopg2.connect(database=target_db, user=target_user,password = target_password,host=target_host)

  

 
 

postgrel执行VACUUM报VACUUM cannot run inside a transaction block的更多相关文章

  1. 执行quartz报错java.lang.NoClassDefFoundError: javax/transaction/UserTransaction

    使用maven ,可以在 http://mvnrepository.com 中去查找 pom 配置如何写 <!-- https://mvnrepository.com/artifact/org. ...

  2. idea执行mapreduce报错 Could not locate Hadoop executable: C:\hadoop-3.1.1\bin\winutils.exe

    window执行mapreduce报错 Exception in thread "main" java.lang.RuntimeException: java.io.FileNot ...

  3. Postgresql之VACUUM和VACUUM FULL对比

    VACUUM命令存在两种形式,VACUUM和VACUUM FULL,它们之间的区别见如下表格: 无VACUUM VACUUM VACUUM FULL 删除大量数据之后 只是将删除数据的状态置为已删除, ...

  4. 解决apscheduler报错:Run time of job …… next run at: ……)” was missed by

    在Django中使用apscheduler django_apscheduler 实现定时任务, 来完成数据拉取. 一段时间后发现数据量对不上,遂查日志 发现报错如下: Run time of job ...

  5. vacuum和vacuum full的处理过程

    对于数据库系统的并发控制,KingbaseES采用MVCC(多版本并发控制)进行处理. 这种机制有一个缺点,就是随着时间的推移,数据文件中积累的dead tuples会越来越多. 怎么去清理这些dea ...

  6. 执行mysqld_safe报错:mysqld does not exist or is not executable

    执行mysqld_safe报错: [root@edu data]# /usr/local/mysql5.7/bin/mysqld_safe --user=mysql160427 12:41:28 my ...

  7. 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql

    准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...

  8. selenium执行js报错

    selenium执行js报错 Traceback (most recent call last):    dr.execute_script(js)  File "C:\Python27\l ...

  9. mysql执行update报错1175解决方法

    mysql执行update报错 update library set status=true where 1=1 Error Code: 1175. You are using safe update ...

随机推荐

  1. P5300 [GXOI/GZOI2019]与或和

    题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一 ...

  2. 《Linux就该这么学》 - 必读的红帽系统与红帽linux认证自学手册

    <Linux就该这么学>   本书作者刘遄从事于linux运维技术行业,较早时因兴趣的驱使接触到了Linux系统并开始学习. 已在2012年考下红帽工程师RHCE_6,今年又分别考下RHC ...

  3. mysql 从一个表查询数据插入另一个表或当前表

    mysql insert into 表明(uid,lng,lat) SELECT uuid,lng,lat FROM 表明

  4. react安装 项目构建

    1.nodejs安装 下载安装包,解压.如果是已编译文件,在/etc/profile中设置PATH(/etc/profile文件中的变量设置,所有用户可用,但需求重启服务器),并source /etc ...

  5. 做ctf题对malloc的疑问

    做cctf pwn printf题目的时候 疑问为什么dir函数会将之前out的name倒叙输出 调试了一下发现当malloc(0xf4)大小时候,例如 第一次分配0x1000的地址,将名字输入到0x ...

  6. 生成免费SSL通配证书

    通过Let's Encrypt 生成免费SSL证书 有效期是3个月 1.下载工具certbot-auto wget https://dl.eff.org/certbot-auto chmod +x c ...

  7. Git 的使用(皮毛))

    1.安装git 软件(下一步直到完成) 2.码云注册(保存代码) 3.创建代码托管仓库 4.创建文件夹 5.写东西并提交到码云 1.在某个文件夹下写东西 2.写完之后在此文件夹下鼠标右键,并选择[gi ...

  8. .Net 操作Excel表格

    一..从NuGet中,引用 Microsoft.Office.Interop.Excel类库. 方法一.先打开一个execl表然后进行保存 Application xApp = null; Workb ...

  9. C. mathematican 的二进制

    题解: subtask1:爆搜,没状压dp的分 subtask2,3:统计有几个操作就好了,分治ntt优化 subtask4,5: 发现和操作顺序无关,然后我们考虑用分治ntt优化 每个的贡献是$n+ ...

  10. Caused by: java.lang.IllegalStateException: RedisConnectionFactory is required

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisTemplat ...