我知道,当我们在postgres表上运行select
查询时,它会获得一个AccessShareLock
。它只在我运行select
查询的表上创建,而不在其他表上创建。我正在使用sqlalchemy与postgres交互,我想要的只是在执行select语句后是否可以清除AccessShareLock
(下面是从here复制的一个示例)
from sqlalchemy.orm import sessionmaker
from models import OneTable, get_engine
engine = get_engine(database="mydb")
session = sessionmaker(bind=engine)()
results = session.query(OneTable.company_name).all()
# need to remove "AccessShareLock" lock on OneTable
# without explicitly calling session.close() or engine.dispose()
session.close()
我所需要的只是在查询表后释放锁。我正在运行一些后台程序服务,定期(比如每小时一次)查询数据库,但是我在这个表上的DDL语句没有执行,因为它需要AccessExclusiveLock
。关于如何完成这项工作或者我应该如何解决这个问题,有什么建议吗
释放表上锁的唯一方法是使用
COMMIT
或ROLLBACK
终止获取锁的事务锁始终保持到事务结束。因此,获得所需信息的方法是确保所有交易都是短期的。除了解决您的问题外,这还将确保autovacuum可以有效地删除旧的行版本
相关问题 更多 >
编程相关推荐