postgresql - 使用 psycopg2 使用 ACCESS EXCLUSIVE 锁定表

标签 postgresql locking psycopg2

我试图通过 Django 和 Heroku 使用 psycopg2 显式锁定一个表,因此在此期间它不会被任何其他服务器/工作人员访问。

我读到 ACCESS EXCLUSIVE 完全符合我的需要。但是,我只找到了explanations about when it is automatically called (with DROP TABLE, VACUUM FULL, etc.。 ;但我不知道如何显式调用它,以按我的意愿锁定表。

我尝试了以下方法:

 with SQL().con2db() as conn:

   cur = conn.cursor()

    lock_query = 'ACCESS EXCLUSIVE {tbl_name}'.format(tbl_name=tbl_name)
    cur.execute(lock_query, )

    #do whatever

    cur.close()

但是我得到一个错误:

psycopg2.ProgrammingError: syntax error at or near "ACCESS"
LINE 1: ACCESS EXCLUSIVE table_name

我怎样才能做到这一点?

最佳答案

要显式锁定表,请使用 SQL 语句 LOCK .

由于锁只持有到数据库事务结束,因此您必须显式地开始和结束事务。

由于这会显着影响并发性,您应该考虑是否有更好的方法来解决您的问题。

关于postgresql - 使用 psycopg2 使用 ACCESS EXCLUSIVE 锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50325195/

相关文章:

mysql锁定选择查询中的行以进行更新

python - 如何从 github pip 安装....powershell 给出错误找不到命令 'git'?

python - Flask-SQLAlchemy 引发 : AttributeError: module 'psycopg2' has no attribute 'paramstyle'

python - 在脚本中使用\o 命令

ruby - 无法使用 Ruby 连接到 postgresQL

python - 如何解决django中clean函数的问题

javascript - js : Escape special characters

sql - 如何从 jsonb int 数组创建 sql 表列

mysql - 没有明显锁的 ActiveRecord "Mysql::Error: Lock wait timeout exceeded"

sql-server - SQL Server 2005 中 LOCK_ESCALATION = TABLE 的等效项是什么?