我有这种表格结构,我们叫person
id | name | table_name |oid
----+-------+-------------+---
1 | James | customer | 5
2 | Smith | employe | 6
所以我想要创建一个SQL脚本,该脚本允许我在删除id = 5
表的第一行之前删除customer
表中带有person
的行。
这是我第一次遇到这种情况,所以我不知道该怎么做。我已经在Google上进行了几次搜索,但没有得到适当的答案,有人可以帮我吗?
答案 0 :(得分:2)
使用游标进行循环以遍历表并运行动态删除。然后,您可以删除人员表。
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;
如果可能,我建议您更改此设计。