Каскадное удаление в Postgres: удаление из дочерних и родительских таблиц с сохраненными идентификаторами из дочерних - PullRequest
0 голосов
/ 17 декабря 2018

В Postgres у меня есть две таблицы, где мне нужно очистить некоторые данные с помощью каскадного удаления:

- PARTICIPANTS_T: has a foreign key USER_ID on USERS_T.ID
- USERS_T

Первый шаг - удалить из PARTICIPANTS_T, если критерий удовлетворен, например,

delete from PARTICIPANTS_T where VALID_FLAG = 'Y';

Второе - удалить из USERS_T строки, идентификаторы которых были указаны в предыдущем Удалить.

delete from USERS_T where ID = [..from Step 1..]

Как выполнить Каскадное удаление в Postgres?

Я думал о сохранении в переменной: select INTO,

if exists drop table user_ids; --This syntax is wrong select id into user_ids from users_t where id in ( select user_id from participants_t where valid_flag = 'Y');

но это неудобно, потому что user_ids становится отдельной таблицей, которую нужно поддерживать.Мой синтаксис выше неверен.Кто-нибудь может дать полный повторяемый сценарий с этими 2 шагами?

1 Ответ

0 голосов
/ 17 декабря 2018

Это сработало: начать / зафиксировать каскадное удаление:

begin;
delete from participants_t where valid_flag = 'Y';
delete from users_t where id in (
            select user_id from participants_t where valid_flag = 'Y');       
commit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...