gpt4 book ai didi

java - 如果表在 PostgreSQL 中被锁定,则 SELECT 查询失败

转载 作者:行者123 更新时间:2023-12-05 05:29:40 24 4
gpt4 key购买 nike

如果表被锁定访问而不是等待锁被释放,有没有办法使选择查询失败?

我更喜欢用 SQL 解决它,但在代码中的 JDBC 级别也可以。

我不能使用 LOCK_TIMEOUT,因为 Postgres 版本太旧。

基本上我喜欢这个

SELECT * 
FROM SOME_TABLE

立即失败而不是等待

BEGIN;
LOCK TABLE SOME_TABLE IN ACCESS EXCLUSIVE MODE;
SELECT pg_sleep(10);
COMMIT TRANSACTION;

编辑:版本未知,因为我使用的 DBMS 实际上是 GaussDB、PostghreSQL,但它基本上表现得像 Postgres,因为它是基于 Postgres 开发的。所以不知道我的版本对应的是哪个版本的Postgres。 SELECT VERSION() 将给我 Gauss 版本而不是 Postgre 版本。

最佳答案

the comment 中的建议早些时候:听起来确实是NOWAIT用于:

NOWAITSpecifies that LOCK TABLE should not wait for any conflicting locks to be released: if the specified lock(s) cannot be acquired immediately without waiting, the transaction is aborted.

所以你应该能够替换这个:

LOCK TABLE SOME_TABLE IN ACCESS EXCLUSIVE MODE;

有了这个:

LOCK TABLE SOME_TABLE IN ACCESS EXCLUSIVE MODE NOWAIT;

不需要 pg_sleep(),如果锁不能立即可用,它将失败。

根据您已经在使用 8.2's pg_sleep() 的事实进行猜测但还没有9.3's lock_timeout ,您的版本应包含在 NOWAIT support starting with 8.0 中.

关于java - 如果表在 PostgreSQL 中被锁定,则 SELECT 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74897757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com