sql - Postgresql SQL 状态 : 25P02 Deadlock?

标签 sql postgresql transactions deadlock database-deadlocks

我的任务是用两个 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.

最佳答案

第一步:填充

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(另一个命令窗口)更新

 update deadlock_example_table_1 set columns1=7 where column1=2;
 update deadlock_example_table_1 set columns1=4 where column1=1;

这通常应该被锁定

第四步:回到流程2

 update deadlock_example_table_1 set columns1=80 where column1=2;

此处死锁

进程 2 和进程 3 应该在不同的 session 上

关于sql - Postgresql SQL 状态 : 25P02 Deadlock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56234595/

相关文章:

mysql - 创建外部表需要很长时间

mysql - phpMyAdmin 中的更新语句不起作用

sql - 更改表添加列语法

sql - 找出sql中递增的子序列

ruby-on-rails - postgres 没有用户或角色,无法创建但可以使用 rails?

.net检测分布式事务

sql - 在此过程中如何将小数小时数转换为小时数和分钟数

postgresql - 之后使用带有 --link 选项的 pg_upgrade 是否有任何负面的性能或功能缺点?

mysql - 我如何知道哪些事务首先运行

php - Codeigniter 返回代码 0 db 错误而没有消息