当前位置: 首页 > 知识库问答 >
问题:

有没有办法在PostgreSQL中手动锁定/解锁不依赖于事务的表行?

饶高雅
2023-03-14

我是数据库锁定新手,所以请耐心等待。

我在一个文件中有我的 SELECT 语句,在另一个文件中有我的 UPDATE 语句。两者都在文件的开头建立连接,然后在文件末尾断开连接。我正在尝试做的是锁定 select 语句中的表行,如果用户取消或更新,则释放该锁定。

我试过咨询锁,但当我断开连接时,它们会解锁。我尝试过的所有其他锁都做同样的事情。

有没有一种方法,我可以实现我想要在我的当前数据库结构,或者我需要重写整个事情或暴力的东西,如row_locked命名的布尔列在我的数据库?

提前感谢您的帮助:)

共有1个答案

严开宇
2023-03-14

如果您需要跨事务和会话持久化该信息,那么是的,您需要一个存储该信息的列。

不过,我不会使用布尔值,而是使用可空的时间戳列,以便您可以看到行何时被锁定(null表示“未锁定”,not null表示“锁定”)。这对于清理“废弃的锁”非常有用。

 类似资料:
  • 我需要使用表锁定(写入)并同时更新几个表,因此我需要同时进行事务,因为锁定不是事务安全的。 从mysql文档中,我阅读了以下 https://dev.mysql.com/doc/refman/5.6/en/lock-tables-and-transactions.html 对事务表(如InnoDB表)使用LOCK TABLES和UNLOCK TALES的正确方法是以SET autocommit=0

  • 不幸的是,我在gradle docs中找不到任何指向我这个问题的东西。非常感谢您的帮助!

  • 问题内容: 我对事务与锁定表有些困惑,以确保数据库完整性,并确保SELECT和UPDATE保持同步,并且没有其他连接干扰它。我需要: 我需要确保没有其他查询会干扰并执行相同的操作(在该连接完成更新行之前读取“旧值”。 我知道我可以默认为只确保一次只有1个连接正在执行此操作,并在完成后将其解锁,但这似乎有点过头了。将它包装在事务中是否会做同样的事情(确保没有其他连接会尝试同一进程而另一个仍在处理)?

  • 问题内容: 问题。 Gradle依赖管理使得: 没有简便的方法来检查依赖项更新的可用性(仅使用某些第三方插件,如ben-manes / gradle-versions-plugin)并下载更新以替换旧版本; 从远程存储库下载依赖项工件,然后将其存储在gradle缓存中,并在后续构建中重用;但是项目的成功编译必须不依赖于与Internet的连接,远程存储库的可用性以及这些存储库中特定版本的依赖项。

  • 问题。 分级依赖项管理是这样进行的: 检查依赖更新的可用性(仅使用一些第三方插件,如Ben-Manes/Gradle-Versions-Plugin),并下载替换旧版本的更新是不容易的; 依赖项构件从远程存储库下载,然后存储在gradle缓存中,并在后续构建中重用;但项目的成功编译不能依赖于与Internet的连接、远程存储库的可用性以及这些存储库中依赖项的特定版本的存在。 null

  • 问题内容: 我一直试图在我的package.json文件上运行npm安装,但是遇到了很多麻烦。我一直依赖于它,一直说“错误:尝试解锁XXX,但尚未锁定”。这是其中之一: 如果我尝试将其作为sudo运行,它似乎会更进一步并开始安装一些软件包,但弹出一些新错误: 我最近更新了我的节点和npm安装。所以也许与它有关。另外,我的大部分开发工作都在办公室里,今天我正在使用VPN,所以也许与此有关。 有任何想