从Postgres中的动态表名称中删除

时间:2018-09-25 02:29:29

标签: postgresql postgresql-9.1

我有这种表格结构,我们叫person

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

所以我想要创建一个SQL脚本,该脚本允许我在删除id = 5表的第一行之前删除customer表中带有person的行。

这是我第一次遇到这种情况,所以我不知道该怎么做。我已经在Google上进行了几次搜索,但没有得到适当的答案,有人可以帮我吗?

1 个答案:

答案 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;

如果可能,我建议您更改此设计。