How do I fix a stuck Postgres process?

Issue

A process in Postgres is locked and is preventing my app from working.

Resolution

You can check the processes running on your Heroku Postgres database by running heroku pg:ps.

For professional tier databases, you can view warnings in your log output to see details of stuck processes. For example:

1966-01-01T12:00:00Z app[postgres.1234]: [ONYX] process 1234 still waiting for AccessShareLock on relation 16668 of database 16385 after 1000.291 ms
Detail: Process holding the lock: 2048. Wait queue: 2580, 2579, 2577, 2578, 2575, 25115, 2589, 2593, 2576, 2592, 2574, 27121, 2691, 2692, 2693, 2695, 2694, 2696, 2698, 2699, 2722, 2757, 2756, 2759, 2758, 2760, 2764, 2761, 2762, 2772, 2776, 2777, 2779, 2781, 2783, 2802, 2782, 2812, 2801, 2819, 2820, 2821, 2818, 2828, 2829, 2830, 2831, 2832, 2873, 2870, 2868, 2875, 2876, 2869, 2874, 2877, 2871, 3037, 3038, 3039, 3040, 3041, 3043, 3044, 3045, 3046, 3093, 3092, 3094, 3096, 3095, 3104, 3091, 3110, 3111, 3178, 3339, 3338, 3340, 3341, 3344, 3343, 3356, 3355, 3357, 3359, 3459, 2314, 31846, 3606, 3605, 3607, 3608, 3620, 3631, 3632, 3637, 3644.

You can cancel individual processes with the following command:

$ heroku pg:kill 2048 -a example-app

where 2048 is the PID (process id) that you wish to stop.

Alternatively, you terminate individual processes by force with the --force flag like so:

$ heroku pg:kill 2048 --force -a example-app

Please note that --force will terminate the entire process, not just the current query.

For cases where killing individual processes isn't working, you can also terminate all the connections to the database by running:

$ heroku pg:killall -a example-app

After this, you should restart your app to remove any previous bad connections:

$ heroku restart -a example-app

Ask on Stack Overflow

Engage with a community of passionate experts to get the answers you need

Ask on Stack Overflow

Heroku Support

Create a support ticket and our support experts will get back to you

Contact Heroku Support