GOOGLE ADS

суббота, 30 апреля 2022 г.

Как вставить несколько строк в таблицу B и обновить нулевые внешние ключи таблицы A новыми идентификаторами?

Я нашел миллион вещей, похожих на StackOverflow, но не совсем в моем случае. Я максимально упрощу:

У меня есть две таблицы следующим образом:

CREATE TABLE B (id uuid PRIMARY KEY);
CREATE TABLE A (id uuid PRIMARY KEY, b_id uuid REFERENCES b);

Есть некоторые NULLзначения в A.b_id. Я пытаюсь создать миграцию, которая делает следующее:

Для каждой строки в Aбез no b_idсоздайте новую строку в Bи назначьте idее A.b_id.

Как я могу сделать это в одном запросе?


Решение проблемы

Предполагая, что вам нужна отдельная запись bдля каждой строки с отсутствующим UUID в a:

WITH upd AS (
UPDATE a
SET b_id = gen_random_uuid()
WHERE b_id IS NULL
RETURNING b_id
)
INSERT INTO b (id)
SELECT b_id FROM upd;

db<>скрипка здесь

Это работает, потому что это одна команда, а ссылка FK применяется только в конце команды.

Видеть:


  • SET CONSTRAINTS ALL DEFERRED не работает должным образом

  • Определенное ограничение DEFERRABLE INITIALLY IMMEDIATE по-прежнему ОТЛОЖЕНО?

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

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...