【分享&备忘录】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_' 开头的表名
相关推荐
ac-er888815 分钟前
Go 原子操作
开发语言·数据库·golang
亥时科技17 分钟前
智慧招商宣传系统(源码+文档+部署+讲解)
java·数据库·开源·源代码管理
maktoub1 小时前
解析 SQL 中的 NULL 与比较操作:NULL 值与任何值的比较会返回 UNKNOWN
服务器·数据库·sql
bcbobo21cn2 小时前
SQL相关子查询
数据库·sql·mysql·相关子查询
梦城忆7 小时前
Mysql的事务隔离机制
数据库·mysql
李歘歘7 小时前
MySQL数据库——索引潜规则(最左前缀原则)
数据库·sql·mysql·存储引擎
im长街7 小时前
11.MySQL视图特性
数据库·mysql
我是苏苏7 小时前
数据库的使用09:使用SSMS工具将SQLsever数据导出到Excel
数据库
穿条秋裤到处跑7 小时前
记一次MybatisPlus一级缓存导致的DB对象取值逻辑错误
java·数据库·缓存
JU HE9 小时前
1 数据库(下):多表设计 、多表查询 + SQL中的with查询语法(MySQL8.0以后版本才支持这种新语法)+ 数据库优化(索引优化)
数据库·sql