【分享&备忘录】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_' 开头的表名
相关推荐
GoppViper11 分钟前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_9621741724 分钟前
Redis 简介
数据库·redis·wpf
夜雪一千43 分钟前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
xuefuhe1 小时前
PostgreSQL源码1:select 1
postgresql
Highcharts.js2 小时前
Highcharts 下钻(Drilldown)柱状图 Demo
数据库·信息可视化·hbase·highcharts·drilldown·js模块·下钻图表
翼龙云_cloud2 小时前
阿里云国际渠道代理商:如何在ECS上部署Flask应用?
运维·数据库·阿里云·flask·云计算
进阶的小木桩2 小时前
mysql 安装问题解决方案记录
数据库·mysql
2601_962071573 小时前
如何利用SpringSecurity进行认证与授权
java·服务器·数据库
山峰哥3 小时前
数据库工程与查询优化案例深度复盘‌
数据库·sql·oracle·编辑器·深度优先·宽度优先
IT大白鼠3 小时前
MSF数据库与资产管理——专业渗透测试流程
数据库·安全·msf