Я сохраняю файл на сервере и сохраняю имя файла, идентификатор пользователя, который загрузил файл, и другую информацию о файле в базу данных PostgreSQL.В идеале я хочу структурировать это так, чтобы это было похоже на транзакцию базы данных.То есть должно произойти одно из следующих действий:
- Сохранить файл
- В случае успеха сохранить информацию в базу данных
- Если сохранение информации в базу данных не удалось, удалите файл
ИЛИ
- Сохранить информацию в базе данных
- В случае успеха сохранить файл
- Если сохранение файла не удалось, удалите информацию из базы данных
Единственная проблема, связанная с этой методологией, заключается в том, что шаг 3 может завершиться неудачей, т. Е. У вас может остаться файл, сохраненный без соответствующей информации в базе данных, или у вас может быть информация из базы данных без сохранения соответствующего файла.
Что я хочу знать, так это то, есть ли способ, которым вы можете использовать любой из двух методов, описанных выше, при этом гарантируя, что шаг 3 всегда происходит или происходит с достаточной надежностью, так что мне не нужно беспокоиться о сбое.
Обратите внимание, что я использую базу данных PostgreSQL и сохраняю файл изображения с использованием функций imagegif
, imagejpeg
и imagepng
из библиотеки GD.
РЕДАКТИРОВАТЬ
В ответ на твердые комментарии Джека ниже я забыл упомянуть, что я взаимодействую с БД через сервер API, поэтому вместо непосредственного взаимодействия с БД яотправка запросов REST в API, который, в свою очередь, взаимодействует с БД.Это фактически означает, что я не могу просто поместить оба взаимодействия с базой данных в одну транзакцию.