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

如果这不是死锁,你能帮我做一个吗?

http://zarez.net/?p=1069

    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