来源:Chatgpt
测试调试:我
先上SQL语句如下:
联级删除单表
sql
DROP TABLE IF EXISTS 表名 CASCADE
批量删除整张表
sql
DO $$
DECLARE
current_table_name text;
BEGIN
-- 获取所有以 'bgd_' 开头的表名
FOR current_table_name IN
SELECT table_name
FROM information_schema.tables
WHERE table_name LIKE 'bgd\_%' ESCAPE '\'
LOOP
-- 构建并执行删除表的语句
EXECUTE 'DELETE FROM ' || current_table_name || ' CASCADE';
END LOOP;
END $$;
批量删除表数据
sql
DO $$
DECLARE
current_table_name text;
BEGIN
-- 获取所有以 'bgd_' 开头的表名
FOR current_table_name IN
SELECT table_name
FROM information_schema.tables
WHERE table_name LIKE 'bgd\_%' ESCAPE '\'
LOOP
-- 构建并执行删除表的语句
EXECUTE 'DROP TABLE IF EXISTS ' || current_table_name || ' CASCADE';
END LOOP;
END $$;
使用注意事项:
- 这个 SQL 脚本使用了 PL/pgSQL 语法,通过查询 information_schema.tables 获取所有以 'bgd_' 开头的表名,并使用 FOR 循环和 EXECUTE 动态执行联级删除语句。
- 这里使用的是 DROP TABLE 语句是会删除整张表, DELETE FROM则是清空表的数据
- 请确保在执行之前备份重要数据,并谨慎使用这样的操作。
- 可以根据表名进行匹配和查询,比如我这边的需求就是删除
获取所有以 'bgd_' 开头的表名