# IPC waits

> PostgreSQL processes waiting for peers, workers, barriers, queues, or phase changes.
---

`IPC` is coordination: this process has reached a point that depends on another PostgreSQL process or execution participant. The peer may be a parallel worker, WAL receiver, checkpointer, archiver, replication process, or another backend in a shared-memory protocol.

## Find the missing peer or phase {#how-to-read}

The waiter is often healthy. Ask which participant is expected to signal it and inspect that participant's state. Parallel-query events should be read as a phase diagram; replication events as a sender/receiver pipeline; checkpoint events as a cluster-wide barrier.

- **Normal:** brief rendezvous in parallel plans, checkpoint start/completion, worker startup, or synchronous replication.
- **Watch:** a foreground waiter remains in the same phase across three samples while its peer makes no visible progress.
- **Urgent:** the peer has exited or is blocked, a queue cannot drain, replication/failover is stalled, or many sessions depend on one stuck coordinator.

## Events to recognize {#top-events}

| Event | Peer or phase |
| --- | --- |
| [BufferIo](buffer-io/) | Another backend performing I/O for the shared buffer |
| [ExecuteGather](execute-gather/) | Child processes feeding a Gather node |
| [ParallelFinish](parallel-finish/) | Parallel workers reaching plan completion |
| [CheckpointDone](checkpoint-done/) | Checkpointer completing a requested checkpoint |
| [SyncRep](sync-rep/) | Remote synchronous standby acknowledgement |
| [WalReceiverWaitStart](wal-receiver-wait-start/) | Startup process waiting for streaming data |
| [MessageQueueReceive](message-queue-receive/) | Shared-memory message queue producer |
| [RecoveryPause](recovery-pause/) | Recovery intentionally paused by operator policy |

## Common misreads {#misreads}

- Killing the waiter does not repair a dead or blocked peer.
- `IPC/SyncRep` is acknowledgement latency; `LWLock/SyncRep` is contention on shared queue/state metadata.
- Many parallel wait names are expected barriers. The question is whether every participant eventually advances.
- `RecoveryPause` can be entirely intentional; check `pg_is_wal_replay_paused()` before treating it as failure.

---

Section pages:

- [IPC: AppendReady](/ipc/append-ready/): Waiting for subplan nodes of an Append plan node to be ready
- [IPC: ArchiveCleanupCommand](/ipc/archive-cleanup-command/): Waiting for archive_cleanup_command to complete
- [IPC: ArchiveCommand](/ipc/archive-command/): Waiting for archive_command to complete
- [IPC: BackendTermination](/ipc/backend-termination/): Waiting for the termination of another backend
- [IPC: BackupWaitWalArchive](/ipc/backup-wait-wal-archive/): Waiting for WAL files required for a backup to be successfully archived
- [IPC: BgworkerShutdown](/ipc/bgworker-shutdown/): Waiting for background worker to shut down
- [IPC: BgworkerStartup](/ipc/bgworker-startup/): Waiting for background worker to start up
- [IPC: BtreePage](/ipc/btree-page/): Waiting for the page number needed to continue a parallel B-tree scan to become available
- [IPC: BufferIo](/ipc/buffer-io/): Waiting for buffer I/O to complete
- [IPC: CheckpointDelayComplete](/ipc/checkpoint-delay-complete/): Waiting for a backend that blocks a checkpoint from completing
- [IPC: CheckpointDelayStart](/ipc/checkpoint-delay-start/): Waiting for a backend that blocks a checkpoint from starting
- [IPC: CheckpointDone](/ipc/checkpoint-done/): Waiting for a checkpoint to complete
- [IPC: CheckpointStart](/ipc/checkpoint-start/): Waiting for a checkpoint to start
- [IPC: ExecuteGather](/ipc/execute-gather/): Waiting for activity from a child process while executing a Gather plan node
- [IPC: HashBatchAllocate](/ipc/hash-batch-allocate/): Waiting for an elected Parallel Hash participant to allocate a hash table
- [IPC: HashBatchElect](/ipc/hash-batch-elect/): Waiting to elect a Parallel Hash participant to allocate a hash table
- [IPC: HashBatchLoad](/ipc/hash-batch-load/): Waiting for other Parallel Hash participants to finish loading a hash table
- [IPC: HashBuildAllocate](/ipc/hash-build-allocate/): Waiting for an elected Parallel Hash participant to allocate the initial hash table
- [IPC: HashBuildElect](/ipc/hash-build-elect/): Waiting to elect a Parallel Hash participant to allocate the initial hash table
- [IPC: HashBuildHashInner](/ipc/hash-build-hash-inner/): Waiting for other Parallel Hash participants to finish hashing the inner relation
- [IPC: HashBuildHashOuter](/ipc/hash-build-hash-outer/): Waiting for other Parallel Hash participants to finish partitioning the outer relation
- [IPC: HashGrowBatchesDecide](/ipc/hash-grow-batches-decide/): Waiting to elect a Parallel Hash participant to decide on future batch growth
- [IPC: HashGrowBatchesElect](/ipc/hash-grow-batches-elect/): Waiting to elect a Parallel Hash participant to allocate more batches
- [IPC: HashGrowBatchesFinish](/ipc/hash-grow-batches-finish/): Waiting for an elected Parallel Hash participant to decide on future batch growth
- [IPC: HashGrowBatchesReallocate](/ipc/hash-grow-batches-reallocate/): Waiting for an elected Parallel Hash participant to allocate more batches
- [IPC: HashGrowBatchesRepartition](/ipc/hash-grow-batches-repartition/): Waiting for other Parallel Hash participants to finish repartitioning
- [IPC: HashGrowBucketsElect](/ipc/hash-grow-buckets-elect/): Waiting to elect a Parallel Hash participant to allocate more buckets
- [IPC: HashGrowBucketsReallocate](/ipc/hash-grow-buckets-reallocate/): Waiting for an elected Parallel Hash participant to finish allocating more buckets
- [IPC: HashGrowBucketsReinsert](/ipc/hash-grow-buckets-reinsert/): Waiting for other Parallel Hash participants to finish inserting tuples into new buckets
- [IPC: LogicalApplySendData](/ipc/logical-apply-send-data/): Waiting for a logical replication leader apply process to send data to a parallel apply process
- [IPC: LogicalParallelApplyStateChange](/ipc/logical-parallel-apply-state-change/): Waiting for a logical replication parallel apply process to change state
- [IPC: LogicalSyncData](/ipc/logical-sync-data/): Waiting for a logical replication remote server to send data for initial table synchronization
- [IPC: LogicalSyncStateChange](/ipc/logical-sync-state-change/): Waiting for a logical replication remote server to change state
- [IPC: MessageQueueInternal](/ipc/message-queue-internal/): Waiting for another process to be attached to a shared message queue
- [IPC: MessageQueuePutMessage](/ipc/message-queue-put-message/): Waiting to write a protocol message to a shared message queue
- [IPC: MessageQueueReceive](/ipc/message-queue-receive/): Waiting to receive bytes from a shared message queue
- [IPC: MessageQueueSend](/ipc/message-queue-send/): Waiting to send bytes to a shared message queue
- [IPC: MultixactCreation](/ipc/multixact-creation/): Waiting for a multixact creation to complete
- [IPC: ParallelBitmapScan](/ipc/parallel-bitmap-scan/): Waiting for parallel bitmap scan to become initialized
- [IPC: ParallelCreateIndexScan](/ipc/parallel-create-index-scan/): Waiting for parallel CREATE INDEX workers to finish heap scan
- [IPC: ParallelFinish](/ipc/parallel-finish/): Waiting for parallel workers to finish computing
- [IPC: ProcSignalBarrier](/ipc/proc-signal-barrier/): Waiting for a barrier event to be processed by all backends
- [IPC: ProcarrayGroupUpdate](/ipc/procarray-group-update/): Waiting for the group leader to clear the transaction ID at transaction end
- [IPC: Promote](/ipc/promote/): Waiting for standby promotion
- [IPC: RecoveryConflictSnapshot](/ipc/recovery-conflict-snapshot/): Waiting for recovery conflict resolution for a vacuum cleanup
- [IPC: RecoveryConflictTablespace](/ipc/recovery-conflict-tablespace/): Waiting for recovery conflict resolution for dropping a tablespace
- [IPC: RecoveryEndCommand](/ipc/recovery-end-command/): Waiting for recovery_end_command to complete
- [IPC: RecoveryPause](/ipc/recovery-pause/): Waiting for recovery to be resumed
- [IPC: ReplicationOriginDrop](/ipc/replication-origin-drop/): Waiting for a replication origin to become inactive so it can be dropped
- [IPC: ReplicationSlotDrop](/ipc/replication-slot-drop/): Waiting for a replication slot to become inactive so it can be dropped
- [IPC: RestoreCommand](/ipc/restore-command/): Waiting for restore_command to complete
- [IPC: SafeSnapshot](/ipc/safe-snapshot/): Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction
- [IPC: SyncRep](/ipc/sync-rep/): Waiting for confirmation from a remote server during synchronous replication
- [IPC: WalReceiverExit](/ipc/wal-receiver-exit/): Waiting for the WAL receiver to exit
- [IPC: WalReceiverUpstreamCatchup](/ipc/wal-receiver-upstream-catchup/): Waiting for upstream server WAL flush position to catch up to requested start point
- [IPC: WalReceiverWaitStart](/ipc/wal-receiver-wait-start/): Waiting for startup process to send initial data for streaming replication
- [IPC: WalSummaryReady](/ipc/wal-summary-ready/): Waiting for a new WAL summary to be generated
- [IPC: XactGroupUpdate](/ipc/xact-group-update/): Waiting for the group leader to update transaction status at transaction end
