选择查询后清除对postgres关系的访问共享锁

时间:2020-04-27 16:56:25

标签: python postgresql sqlalchemy

我了解到,当我们在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()

我需要做的就是在查询表后释放锁。我正在运行一些守护程序服务,这些服务定期(例如每小时一次)查询数据库,但由于需要AccessExclusiveLock,因此未执行此表上的DDL语句。关于如何完成此工作或应该如何解决此问题的任何建议

1 个答案:

答案 0 :(得分:0)

释放表锁的唯一方法是使用COMMITROLLBACK终止获得该锁的事务。 锁始终保持到交易结束。

因此,获取所需内容的方法是确保所有交易都简短。除了解决您的问题外,这还将确保自动清理可以有效删除旧行版本。