Thank you the comments. We found the panic happened when adding one of our patch. static int ProcessStartupPacket(Port *port, bool SSLdone) { ...... /* * If we're going to reject the connection due to database state, say so * now instead of wasting cycles on an authentication exchange. (This also * allows a pg_ping utility to be written.) */ switch (port->canAcceptConnections) { case CAC_STARTUP: ereport(*LOG*, (errcode(ERRCODE_CANNOT_CONNECT_NOW), errmsg("the database system is starting up"))); break; ...... } I understand the patch would accept connection while Postgres master is still recovering. and it is dangerous in general. When I remove the patch(be PANIC still). no panic happened. It seems have relationship. I also noticed there is one post for similar problem discussion. http://www.postgresql-archive.org/Re-Crash-observed-during-the-start-of-the-Postgres-process-td5958225.html <http://www.postgresql-archive.org/Re-Crash-observed-during-the-start-of-the-Postgres-process-td5958225.html> My doubt is Standby is redoing the records in WAL from master. how accept connection in standby side while recovering would trigger btree_xlog_delete_get_latestRemovedXid() and panic happen. I tried to read the postgres code the get the clear map. But still confused. Are you aware and would you kindly explain the relationship behind? Or give me some hint how to investigate it? -- View this message in context: http://www.postgresql-archive.org/Is-there-possibility-btree-redo-with-XLOG-BTREE-DELETE-done-between-standby-redo-and-the-end-of-backp-tp5963066p5963181.html Sent from the PostgreSQL - general mailing list archive at Nabble.com. -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general