我的 PostgreSQL 数据库中的 PL/pgSQL 函数面临死锁问题。请在代码块中找到 SQL 语句(只是示例):
BEGIN
UPDATE accounts SET balance = 0 WHERE acct_name like 'A%';
UPDATE accounts SET balance = balance + 100 WHERE acct_name like '%A';
EXCEPTION WHEN OTHERS THEN RAISE NOTICE SQLERRM;
END;
我发现在这条语句运行期间发生了死锁。但我不确定是否有其他语句试图同时更新此表(因为我在日志系统中没有找到任何语句)。
那么,这个语句中是否有可能发生死锁?据我所知,如果我们用BEGIN
/阻止了整个语句END
。会有相同的事务,不应该被自己锁定。