【分享&备忘录】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_' 开头的表名
相关推荐
Old Uncle Tom13 小时前
Harness Engineering 综述
java·开发语言·数据库
疯狂打码的少年13 小时前
Cache的三种映射方式(直接/全相联/组相联)
linux·服务器·数据库·笔记
我是一颗柠檬13 小时前
【MySQL全面教学】MySQL备份与恢复Day14(2026年)
数据库·后端·mysql
渣渣盟13 小时前
MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析
大数据·数据库·mysql
小小工匠14 小时前
Redis - 基本架构:一个键值数据库到底由什么组成
数据库·redis·架构
mN9B2uk1714 小时前
为mysql数据库建立索引
数据库·mysql·oracle
SilentSamsara14 小时前
SQLAlchemy 2.x:异步 ORM 与数据库迁移 Alembic 完整指南
开发语言·数据库·python·sql·青少年编程·oracle·fastapi
流星白龙14 小时前
【MySQL高阶】7.MySQL日志
数据库·mysql·adb
流星白龙14 小时前
【MySQL高阶】0.MySQL的安装
数据库·mysql·adb
Rick199315 小时前
联合索引是按顺序排好序的
数据库·mysql