Thread

Commits

  1. Set ActiveSnapshot when logically replaying inserts

  1. BUG #15288: Logical Replication failed when inserting record which has CHECK constraint

    The Post Office <noreply@postgresql.org> — 2018-07-20T19:02:41Z

    The following bug has been logged on the website:
    
    Bug reference:      15288
    Logged by:          Minh Quan TRAN
    Email address:      account@itscaro.me
    PostgreSQL version: 10.4
    Operating system:   Linux 64
    Description:        
    
    Hello,
    
    I encountered segfault when using logical replication with a check
    constraint.
    
    I looked into /backend/replication/logical/worker.c and found out that
    
         - in apply_handle_insert, slot_store_cstrings is called before 
    PushActiveSnapshot
         - in apply_handle_update & apply_handle_delete, slot_store_cstrings 
    is called after PushActiveSnapshot
    
             /* Process and store remote tuple in the slot */
             oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate));
             slot_store_cstrings(remoteslot, rel, newtup.values);
             slot_fill_defaults(rel, estate, remoteslot);
             MemoryContextSwitchTo(oldctx);
    
             PushActiveSnapshot(GetTransactionSnapshot());
    
    
    
    Core dump
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    Core was generated by `postgres: bgworker: logical replication worker for
    subscription'.
    Program terminated with signal SIGSEGV, Segmentation fault.
    #0  GetActiveSnapshot () at
    ./build/../src/backend/utils/time/snapmgr.c:843
    843     ./build/../src/backend/utils/time/snapmgr.c: No such file or
    directory.
    #1  0x000056239fc83ecd in postquel_start (fcache=0x5623a1c83b78,
    es=0x5623a1c91a70)
        at ./build/../src/backend/executor/functions.c:809
    809     ./build/../src/backend/executor/functions.c: No such file or
    directory.
    #2  fmgr_sql (fcinfo=0x5623a1c7af98) at
    ./build/../src/backend/executor/functions.c:1150
    1150    in ./build/../src/backend/executor/functions.c
    #3  0x000056239fc75b4f in ExecInterpExpr (state=0x5623a1c7aeb8,
    econtext=0x5623a1c7b898, isnull=<optimized out>)
        at ./build/../src/backend/executor/execExprInterp.c:672
    672     ./build/../src/backend/executor/execExprInterp.c: No such file or
    directory.
    #4  0x000056239fc72a96 in ExecEvalExprSwitchContext (isNull=0x7ffdc20d1487
    "", econtext=0x5623a1c7b898,
        state=<optimized out>) at
    ./build/../src/include/executor/executor.h:308
    308     ./build/../src/include/executor/executor.h: No such file or
    directory.
    #5  ExecCheck (state=<optimized out>,
    econtext=econtext(at)entry=0x5623a1c7b898)
        at ./build/../src/backend/executor/execExpr.c:556
    556     ./build/../src/backend/executor/execExpr.c: No such file or
    directory.
    #6  0x000056239fdefec0 in domain_check_input
    (value=value(at)entry=94711038065448, isnull=0 '\000',
        my_extra=my_extra(at)entry=0x5623a1c79bd0) at
    ./build/../src/backend/utils/adt/domains.c:180
    180     ./build/../src/backend/utils/adt/domains.c: No such file or
    directory.
    #7  0x000056239fdf0100 in domain_in (fcinfo=0x7ffdc20d1530) at
    ./build/../src/backend/utils/adt/domains.c:255
    255     in ./build/../src/backend/utils/adt/domains.c
    #8  0x000056239feccd85 in InputFunctionCall
    (flinfo=flinfo(at)entry=0x7ffdc20d1900,
        str=str(at)entry=0x5623a1bf4698 "{test.Type.blabla}",
    typioparam=typioparam(at)entry=28498, typmod=typmod(at)entry=-1) at
    ./build/../src/backend/utils/fmgr/fmgr.c:1640
    1640    ./build/../src/backend/utils/fmgr/fmgr.c: No such file or
    directory.
    #9  0x000056239fecd01d in OidInputFunctionCall (functionId=<optimized
    out>,
        str=0x5623a1bf4698 "{test.Type.blabla}",
        typioparam=28498, typmod=-1) at
    ./build/../src/backend/utils/fmgr/fmgr.c:1743
    1743    in ./build/../src/backend/utils/fmgr/fmgr.c
    #10 0x000056239fd6429f in slot_store_cstrings
    (slot=slot(at)entry=0x5623a1c664e8, rel=rel(at)entry=0x5623a1c60bf0,
        values=values(at)entry=0x7ffdc20d1a70) at
    ./build/../src/backend/replication/logical/worker.c:354
    354     ./build/../src/backend/replication/logical/worker.c: No such file or
    directory.
    #11 0x000056239fd64cc2 in apply_handle_insert
    (s=s(at)entry=0x7ffdc20d5580)
        at ./build/../src/backend/replication/logical/worker.c:612
    612     in ./build/../src/backend/replication/logical/worker.c
    #12 0x000056239fd65e5b in apply_dispatch (s=0x7ffdc20d5580) at
    ./build/../src/backend/replication/logical/worker.c:912
    912     in ./build/../src/backend/replication/logical/worker.c
    #13 LogicalRepApplyLoop (last_received=97628639619392) at
    ./build/../src/backend/replication/logical/worker.c:1119
    1119    in ./build/../src/backend/replication/logical/worker.c
    #14 ApplyWorkerMain (main_arg=<optimized out>) at
    ./build/../src/backend/replication/logical/worker.c:1671
    1671    in ./build/../src/backend/replication/logical/worker.c
    #15 0x000056239fd3540c in StartBackgroundWorker () at
    ./build/../src/backend/postmaster/bgworker.c:835
    835     ./build/../src/backend/postmaster/bgworker.c: No such file or
    directory.
    #16 0x000056239fd42175 in do_start_bgworker (rw=0x5623a1b71870) at
    ./build/../src/backend/postmaster/postmaster.c:5728
    5728    ./build/../src/backend/postmaster/postmaster.c: No such file or
    directory.
    #17 maybe_start_bgworkers () at
    ./build/../src/backend/postmaster/postmaster.c:5941
    5941    in ./build/../src/backend/postmaster/postmaster.c
    #18 0x000056239fd42d35 in sigusr1_handler (postgres_signal_arg=<optimized
    out>)
        at ./build/../src/backend/postmaster/postmaster.c:5121
    5121    in ./build/../src/backend/postmaster/postmaster.c
    #19 <signal handler called>
    #20 0x00007f533261a3a3 in __select_nocancel () at
    ../sysdeps/unix/syscall-template.S:84
    84      ../sysdeps/unix/syscall-template.S: No such file or directory.
    #21 0x000056239fae8c71 in ServerLoop () at
    ./build/../src/backend/postmaster/postmaster.c:1719
    1719    ./build/../src/backend/postmaster/postmaster.c: No such file or
    directory.
    #22 0x000056239fd4407a in PostmasterMain (argc=3, argv=0x5623a1b49ef0)
        at ./build/../src/backend/postmaster/postmaster.c:1363
    1363    in ./build/../src/backend/postmaster/postmaster.c
    #23 0x000056239faeac74 in main (argc=3, argv=0x5623a1b49ef0) at
    ./build/../src/backend/main/main.c:228
    228     ./build/../src/backend/main/main.c: No such file or directory.
    
    Related discussion in pgsql-hackers
    https://www.postgresql.org/message-id/flat/4EB4BD78-BFC3-4D04-B8DA-D53DF7160354%40webedia-group.com