Я не могу говорить за SQL Сервер, но в Postgres да, это может случиться.
Теоретически ответственность за их очистку несет диспетчер транзакций (программное обеспечение, управляющее распределенной транзакцией).
Если диспетчер транзакций не очищает должным образом (например, после ошибки sh), вам необходимо сделать это вручную.
Вы можете использовать системное представление pg_prepared_xacts для отслеживания «подготовленных транзакций».
Вы можете запросить это представление и проверить возраст транзакций. Если этот возраст превышает некоторый порог (подходящий для вашей среды), вы можете прекратить их вручную, используя rollback prepared