Postgresql 如何锁定表格进行书写
我想在一段时间内锁定一个表格以便书写,同时保留它以供阅读。 可能吗? 理想情况下,我希望使用谓词锁定表(例如防止写入行“Postgresql 如何锁定表格进行书写,postgresql,sequelize.js,Postgresql,Sequelize.js,我想在一段时间内锁定一个表格以便书写,同时保留它以供阅读。 可能吗? 理想情况下,我希望使用谓词锁定表(例如防止写入行“where country=france”)。如果您确实希望锁定此类插入,即查询应该挂起,并且只有在您允许的情况下才继续,则必须在表上放置共享锁,并保持事务打开 这通常不是一个好主意 如果要防止任何此类插入,即在尝试此类插入时引发错误,请在插入前创建一个触发器,该触发器在新的行满足条件时引发异常。如果确实要锁定此类插入,即查询应挂起并仅在允许时继续,您必须在表上放置共享锁,并保
where country=france
”)。如果您确实希望锁定此类插入,即查询应该挂起,并且只有在您允许的情况下才继续,则必须在表上放置共享
锁,并保持事务打开
这通常不是一个好主意
如果要防止任何此类插入,即在尝试此类插入时引发错误,请在插入前创建一个
触发器,该触发器在新的
行满足条件时引发异常。如果确实要锁定此类插入,即查询应挂起并仅在允许时继续,您必须在表上放置共享
锁,并保持交易打开
这通常不是一个好主意
如果要防止任何此类插入,即在尝试此类插入时引发错误,请在插入前创建一个
触发器,该触发器在新的
行满足条件时引发异常。您可以使用进行共享
锁定,它阻止其他事务执行,如更新
和删除
,同时允许选择共享
。(详见文件:[13.3.2])
例如,有两个进程按以下顺序访问表user\u table
:
开始代码>
从用户_表中选择用户名,其中country=法国用于共享代码>
从用户_表中选择*进行共享代码>(在这里,进程B仍然可以读取表中的所有行)
updateuser\u table SET username='test',其中country=france代码>(在这里,进程B被阻止,正在等待进程A完成其事务)
您可以将
用于共享
锁定,这会阻止其他事务执行,如更新
和删除
,同时允许选择共享
。(详见文件:[13.3.2])
例如,有两个进程按以下顺序访问表user\u table
:
开始代码>
从用户_表中选择用户名,其中country=法国用于共享代码>
从用户_表中选择*进行共享代码>(在这里,进程B仍然可以读取表中的所有行)
updateuser\u table SET username='test',其中country=france代码>(在这里,进程B被阻止,正在等待进程A完成其事务)
“with a predicate”只会锁定行,而不是整个表。但你为什么认为你需要这个?你想用它解决的真正问题是什么?很少需要显式锁定。“带谓词”将只锁定行,而不是整个表。但你为什么认为你需要这个?你想用它解决的真正问题是什么?很少需要显式锁定。我关于这个问题的问题::)我关于这个问题的问题::)是的,但这并不妨碍插入带有
country='france'
的新行。是的,但这并不妨碍插入带有country='france'
的新行。