Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL在创建表分区时检测到死锁错误_Postgresql_Deadlock - Fatal编程技术网

PostgreSQL在创建表分区时检测到死锁错误

PostgreSQL在创建表分区时检测到死锁错误,postgresql,deadlock,Postgresql,Deadlock,我正在使用PostgreSQL 10的新分区表功能。我有一个分区的父表,如下所示 CREATE TABLE names ( id integer, name varchar(64) ) PARTITION BY RANGE (id) ERROR: deadlock detected DETAIL: Process 7802 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked b

我正在使用PostgreSQL 10的新分区表功能。我有一个分区的父表,如下所示

CREATE TABLE names (
    id integer,
    name varchar(64)
) PARTITION BY RANGE (id)
ERROR:  deadlock detected
DETAIL:  Process 7802 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked by process 7803.
    Process 7803 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked by process 7802.
    Process 7802: 
          CREATE TABLE names__139__119230558__120050888 PARTITION OF names
          FOR VALUES FROM ('119230558') TO ('120050888')
    Process 7803: 
          CREATE TABLE names__94__80601867__81503664 PARTITION OF names
          FOR VALUES FROM ('80601867') TO ('81503664')
在将数据加载到数据库时,我有许多节点像这样并行创建分区表

CREATE TABLE names__139__119230558__120050888 PARTITION OF names
FOR VALUES FROM ('119230558') TO ('120050888')
然后,不知何故,
检测到死锁
错误将像这样出现

CREATE TABLE names (
    id integer,
    name varchar(64)
) PARTITION BY RANGE (id)
ERROR:  deadlock detected
DETAIL:  Process 7802 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked by process 7803.
    Process 7803 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked by process 7802.
    Process 7802: 
          CREATE TABLE names__139__119230558__120050888 PARTITION OF names
          FOR VALUES FROM ('119230558') TO ('120050888')
    Process 7803: 
          CREATE TABLE names__94__80601867__81503664 PARTITION OF names
          FOR VALUES FROM ('80601867') TO ('81503664')
这里有一个奇怪的部分,不足为奇,死锁意味着两个进程等待其他进程释放资源,同时它们持有彼此所需的资源,然而,仔细观察死锁错误

Process 7802 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked by process 7803.
Process 7803 waits for AccessExclusiveLock on relation 16401 of database 16390; blocked by process 7802.

实际上,它正在等待数据库16390的同一个资源
关系16401
,在本例中,它是
名称
父分区表。所以问题是,当两个进程实际获取相同的资源时,如何检测到死锁?我认为第二个过程应该等到第一个过程完成。

您在这方面有什么进展吗?