PostgreSQL在创建表分区时检测到死锁错误
我正在使用PostgreSQL 10的新分区表功能。我有一个分区的父表,如下所示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
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
,在本例中,它是名称
父分区表。所以问题是,当两个进程实际获取相同的资源时,如何检测到死锁?我认为第二个过程应该等到第一个过程完成。您在这方面有什么进展吗?