• Amit Kapila's avatar
    Fix Logical Replication of Truncate in synchronous commit mode. · e7eea52b
    Amit Kapila authored
    The Truncate operation acquires an exclusive lock on the target relation
    and indexes. It then waits for logical replication of the operation to
    finish at commit. Now because we are acquiring the shared lock on the
    target index to get index attributes in pgoutput while sending the
    changes for the Truncate operation, it leads to a deadlock.
    
    Actually, we don't need to acquire a lock on the target index as we build
    the cache entry using a historic snapshot and all the later changes are
    absorbed while decoding WAL. So, we wrote a special purpose function for
    logical replication to get a bitmap of replica identity attribute numbers
    where we get that information without locking the target index.
    
    We decided not to backpatch this as there doesn't seem to be any field
    complaint about this issue since it was introduced in commit 5dfd1e5a in
    v11.
    
    Reported-by: Haiying Tang
    Author: Takamichi Osumi, test case by Li Japin
    Reviewed-by: Amit Kapila, Ajin Cherian
    Discussion: https://postgr.es/m/OS0PR01MB6113C2499C7DC70EE55ADB82FB759@OS0PR01MB6113.jpnprd01.prod.outlook.com
    e7eea52b
relcache.h 4.65 KB