Удалить из динамического имени таблицы в postgres - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть эта структура таблицы, давайте назовем person

id  | name  | table_name  |oid
----+-------+-------------+---
 1  | James | customer    | 5
 2  | Smith | employe     | 6

Итак, я хочу создать сценарий SQL, который позволит мне удалить строку с id = 5 в таблице customerперед удалением первой строки в таблице person.

Я впервые сталкиваюсь с такой ситуацией, поэтому понятия не имею, как это сделать.Я сделал несколько поисков в Google, но у меня нет подходящего ответа, кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 25 сентября 2018

Используйте курсор для цикла, чтобы пройти вашу таблицу и запустить динамическое удаление.Затем вы можете удалить свой персональный стол.

DO $$
DECLARE
v_rec RECORD;
BEGIN
for v_rec IN ( select table_name, oid from person )
LOOP
  EXECUTE format('DELETE FROM '||v_rec.table_name ||' WHERE id = $1' )  USING v_rec.oid;
END LOOP;
END;
$$ LANGUAGE plpgsql;

Я бы посоветовал вам изменить этот дизайн, если это возможно.

...