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

2024-09-29 23:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道,当我们在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。关于如何完成这项工作或者我应该如何解决这个问题,有什么建议吗


Tags: fromimport示例closegetheresqlalchemysession
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:30

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

因此,获得所需信息的方法是确保所有交易都是短期的。除了解决您的问题外,这还将确保autovacuum可以有效地删除旧的行版本

相关问题 更多 >

    热门问题