【分享&备忘录】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_' 开头的表名
相关推荐
亚空间仓鼠4 小时前
关系型数据库MySQL(五):Galara高可用
数据库·mysql
l1t5 小时前
DeepSeek总结的Postgres 性能衰退
postgresql
weixin_586061465 小时前
JavaScript中Redux-Thunk处理异步Action的任务流
jvm·数据库·python
C^h5 小时前
rtthread控制达妙4310电机
数据库·单片机·嵌入式硬件
晴天¥5 小时前
达梦数据库共享存储集群搭建(DSC双节点+Openfiler-IP SAN存储)
linux·数据库·达梦数据库
2401_897190555 小时前
Golang怎么写TODO待办应用_Golang TODO应用教程【深入】
jvm·数据库·python
渔舟小调5 小时前
P11 | 收藏与行程:用户行为类接口的设计模式
数据库·设计模式·oracle
m0_678485455 小时前
CSS实现浮动图标与文本居中对齐_配合浮动与flex
jvm·数据库·python
做时间的朋友。5 小时前
MySQL 8.0 窗口函数
android·数据库·mysql
试试勇气5 小时前
MySQL--库的操作
数据库·mysql