Выполнение запроса insert при успешном удалении в postgres

#sql #postgresql

#sql #postgresql

Вопрос:

Можно ли вставить некоторые данные в одну таблицу, если какая-то запись удалена в другой таблице?

Я могу сделать это с помощью нескольких запросов (сначала удалить, затем вставить, проверив, существует ли он). Но это выполняется как два запроса. Возможно ли объединить запросы или какой наиболее эффективный способ сделать это?

Комментарии:

1. решение находится в руководстве

Ответ №1:

 WITH deleted_rows AS (
   DELETE FROM users 
   WHERE
      id = 15
   RETURNING *
)
INSERT INTO users_history (SELECT * FROM deleted_rows);
 

Комментарии:

1. Рассмотрите возможность добавления некоторого поясняющего текста вместо простого размещения некоторого кода.

Ответ №2:

Я объясняю свой ответ:

RETURNING * возвращает записи таблицы, такие как select * from command, но возвращает только удаленные записи. Эту RETURNING команду вы также можете использовать после команды INSERT or UPDATE . WITH Запрос, являющийся CTE (Common Table Expression) запросом, особенно полезен, когда подзапрос выполняется несколько раз. Это одинаково полезно вместо временных таблиц. Он вычисляет агрегацию один раз и позволяет нам ссылаться на нее по ее имени (возможно, несколько раз) в запросах. Итак, наконец, мы используем SELECT * FROM deleted_rows запрос, который вернет все удаленные записи, и с помощью INSERT INTO users_history запроса мы можем вставить все эти возвращаемые записи в новую user_history таблицу.