【分享&备忘录】Postgresql/pgsql 根据规则,批量联级删除多张表

来源: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 $$;

使用注意事项:

  1. 这个 SQL 脚本使用了 PL/pgSQL 语法,通过查询 information_schema.tables 获取所有以 'bgd_' 开头的表名,并使用 FOR 循环和 EXECUTE 动态执行联级删除语句。
  2. 这里使用的是 DROP TABLE 语句是会删除整张表, DELETE FROM则是清空表的数据
  3. 请确保在执行之前备份重要数据,并谨慎使用这样的操作。
  4. 可以根据表名进行匹配和查询,比如我这边的需求就是删除获取所有以 'bgd_' 开头的表名
相关推荐
素材积累2 小时前
博士后出站来深可申请的项目补贴等
数据库
_1_74 小时前
SQL Server 磁盘满了 收缩日志
数据库·sqlserver
basketball6164 小时前
Redis基础:1. Redis介绍
数据库·redis·缓存
李可以量化4 小时前
成交量的终极量化策略:价量共振指标完整实现(下篇)
前端·数据库·人工智能
汽车仪器仪表相关领域5 小时前
南华 NHAT-610 柴油车排放测试仪 产品详解
数据库·功能测试·汽车·压力测试·可用性测试
我滴老baby7 小时前
工业时序数据实战:基于 DolphinDB 流计算引擎的实现与调优
数据库
睡不醒男孩0308237 小时前
TiDB数据库调研
数据库·tidb
珠***格7 小时前
实操落地|防逆流装置的安装规范、调试标准与故障处置
网络·数据库·人工智能·分布式·能源·边缘计算
Omics Pro8 小时前
3种蛋白结构输入方式!已申报欧洲发明专利
数据库·人工智能·python·机器学习·plotly
itfallrain9 小时前
Spring 构造器循环依赖排查:@RequiredArgsConstructor + @Lazy 到底有没有生效
数据库·python·spring