Postgresql SQL 状态:25P02 死锁?
Postresql SQL State: 25P02 Deadlock?
我的任务是用两个 SQL 事务创建死锁。我在 PgAdmin 工作。
任务说:
"创建两个可以执行的SQL交易
交互地(在评论中注释交易应该交错的顺序)到
制造僵局并解释僵局的原因。”
我尝试创建它并在线阅读它,但这是我在没有 COMMIT/ROLLBACK 的情况下尝试让两个进程同时运行时遇到的唯一错误。
我收到此错误消息:
ERROR: current transaction is aborted, commands ignored until end of transaction block
SQL state: 25P02
如果这不是死锁,你能帮我做一个吗?
CREATE TABLE deadlock_example_table_1 (column1 int)
CREATE TABLE deadlock_example_table_2 (column1 int)
INSERT INTO deadlock_example_table_1 (column1)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
INSERT INTO deadlock_example_table_2 (column1)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
BEGIN;
DELETE FROM deadlock_example_table_1 WHERE column1 = 2
BEGIN;
DELETE FROM deadlock_example_table_2 WHERE column1 = 2
https://medium.com/@clairesimmonds/postgresql-decoding-deadlocks-183e6a792fd3
我认为输出应该类似于本文中的内容。
ERROR: deadlock detected
DETAIL: Process 16121 waits for AccessExclusiveLock on relation 17389 of database 16390; blocked by process 15866.
Process 15866 waits for AccessShareLock on relation 17309 of database 16390; blocked by process 16121.
HINT: See server log for query details.
第 1 步:填充
INSERT INTO deadlock_example_table_1 (column1)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
go
commit;
第 2 步:进程 2,更新
update deadlock_example_table_1 set columns1=5 where column1=1;
第 3 步:处理 3(另一个命令 window)更新
update deadlock_example_table_1 set columns1=7 where column1=2;
update deadlock_example_table_1 set columns1=4 where column1=1;
这通常应该被锁定
第 4 步:return 处理 2
update deadlock_example_table_1 set columns1=80 where column1=2;
此处死锁
进程 2 和进程 3 应该在不同的会话中
必须同时执行。
打开两个 windows 并执行此操作:
Process
我的任务是用两个 SQL 事务创建死锁。我在 PgAdmin 工作。 任务说: "创建两个可以执行的SQL交易 交互地(在评论中注释交易应该交错的顺序)到 制造僵局并解释僵局的原因。” 我尝试创建它并在线阅读它,但这是我在没有 COMMIT/ROLLBACK 的情况下尝试让两个进程同时运行时遇到的唯一错误。 我收到此错误消息:
ERROR: current transaction is aborted, commands ignored until end of transaction block
SQL state: 25P02
如果这不是死锁,你能帮我做一个吗?
CREATE TABLE deadlock_example_table_1 (column1 int)
CREATE TABLE deadlock_example_table_2 (column1 int)
INSERT INTO deadlock_example_table_1 (column1)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
INSERT INTO deadlock_example_table_2 (column1)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
BEGIN;
DELETE FROM deadlock_example_table_1 WHERE column1 = 2
BEGIN;
DELETE FROM deadlock_example_table_2 WHERE column1 = 2
https://medium.com/@clairesimmonds/postgresql-decoding-deadlocks-183e6a792fd3 我认为输出应该类似于本文中的内容。
ERROR: deadlock detected
DETAIL: Process 16121 waits for AccessExclusiveLock on relation 17389 of database 16390; blocked by process 15866.
Process 15866 waits for AccessShareLock on relation 17309 of database 16390; blocked by process 16121.
HINT: See server log for query details.
第 1 步:填充
INSERT INTO deadlock_example_table_1 (column1)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
go
commit;
第 2 步:进程 2,更新
update deadlock_example_table_1 set columns1=5 where column1=1;
第 3 步:处理 3(另一个命令 window)更新
update deadlock_example_table_1 set columns1=7 where column1=2;
update deadlock_example_table_1 set columns1=4 where column1=1;
这通常应该被锁定
第 4 步:return 处理 2
update deadlock_example_table_1 set columns1=80 where column1=2;
此处死锁
进程 2 和进程 3 应该在不同的会话中
必须同时执行。 打开两个 windows 并执行此操作: Process