从 postgres 中的动态 table 名称中删除
Delete from a dynamic table name in postgres
我有table这个结构,我们调用person
id | name | table_name |oid
----+-------+-------------+---
1 | James | customer | 5
2 | Smith | employe | 6
所以我想要创建一个 SQL 脚本,允许我在删除 customer
table 中的 id = 5
行之前删除第一行person
table.
第一次遇到这种情况,不知道该怎么办。我在 Google 上进行了几次搜索,但没有得到任何合适的答案,有人可以帮助我吗?
使用游标for循环遍历你的table和运行动态删除。然后你可以删除你的人 table.
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 = ' ) USING v_rec.oid;
END LOOP;
END;
$$ LANGUAGE plpgsql;
如果可能,我建议您更改此设计。
我有table这个结构,我们调用person
id | name | table_name |oid
----+-------+-------------+---
1 | James | customer | 5
2 | Smith | employe | 6
所以我想要创建一个 SQL 脚本,允许我在删除 customer
table 中的 id = 5
行之前删除第一行person
table.
第一次遇到这种情况,不知道该怎么办。我在 Google 上进行了几次搜索,但没有得到任何合适的答案,有人可以帮助我吗?
使用游标for循环遍历你的table和运行动态删除。然后你可以删除你的人 table.
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 = ' ) USING v_rec.oid;
END LOOP;
END;
$$ LANGUAGE plpgsql;
如果可能,我建议您更改此设计。