Сделать два зависимых INSERT в разные таблицы одним запросом postgresql?

Да, в PostgreSQL можно выполнить два зависимых INSERT-запроса в разные таблицы одним запросом, используя выражение WITH (Common Table Expressions) и конструкцию INSERT INTO ... SELECT ....

Для наглядности предположим, что у нас есть две таблицы: table1 и table2. Предположим также, что table2 имеет столбец table1_id, который является внешним ключом, указывающим на id строки в table1, и мы хотим выполнить вставку данных в обе таблицы в едином запросе.

Ниже приведен пример запроса:

WITH inserted_data AS (
  INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2')
  RETURNING id
)
INSERT INTO table2 (table1_id, column3) SELECT id, 'value3' FROM inserted_data;

В этом примере мы создаем временную таблицу inserted_data, которая содержит результат первого INSERT-запроса в table1. Мы используем конструкцию RETURNING для возврата id только что вставленной строки в table1.

Затем мы выполняем второй INSERT-запрос в table2, используя SELECT из временной таблицы inserted_data, чтобы получить значение внешнего ключа для вставки в table2. Мы также указываем значение для column3 как 'value3'.

Вы можете адаптировать этот пример под вашу ситуацию, указав соответствующие названия таблиц, столбцов и значения. Обратите внимание, что порядок вставки может быть важен, поскольку имеет значение, какая таблица зависит от другой.

Однако стоит знать, что этот подход не гарантирует атомарность операции. Если первый INSERT завершится успешно, но второй INSERT вызовет ошибку, тогда состояние базы данных будет несогласованным. Есть риски утери данных или нарушения целостности.